1161. 最大层内元素和(深搜 & 层次遍历)

1161. 最大层内元素和

dfs深搜,能比较方便的统计层数。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
	private int[] val;

	public int maxLevelSum(TreeNode root) {
		int depth = getdepth(root);
		val = new int[depth + 1];
		dfs(root, 1);
		int maxvalue = root.val - 1;
		int res = -1;
		for (int i = 1; i < depth + 1; i++) {
			if (val[i] > maxvalue) {
				maxvalue = val[i];
				res = i;
			}
		}
		return res;
	}

	public void dfs(TreeNode root, int depth) {
		if (root == null)
			return;
		val[depth] += root.val;
		dfs(root.left, depth + 1);
		dfs(root.right, depth + 1);
		return;
	}

	// 得到树的深度,从而开相对应的数组,不会浪费空间
	public int getdepth(TreeNode root) {
		if (root == null)
			return 0;
		else
			return Math.max(getdepth(root.left), getdepth(root.right)) + 1;
	}
}

别人写的题解:

BFS广搜,记录深度的方法学到了,利用循环将队列清空后,再添加就是下一层的节点了。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int maxLevelSum(TreeNode root) {
		if (root == null) {
			return 0;
		}
		Queue<TreeNode> queue = new LinkedList<TreeNode>();
		queue.offer(root);
		int MaxValue = root.val - 1;
		int Index = 0;
		int Level = 0;
		while (!queue.isEmpty()) {
			int size = queue.size();
			int sum = 0;
			Level++;// 记录层数
			while (size > 0) {
				size--;
				TreeNode curNode = queue.poll();
				sum += curNode.val;
				if (curNode.left != null) {
					queue.offer(curNode.left);
				}
				if (curNode.right != null) {
					queue.offer(curNode.right);
				}
			}
			if (sum > MaxValue) {
				MaxValue = sum;
				Index = Level;
			}
		}
		return Index;
	}
}
发布了56 篇原创文章 · 获赞 4 · 访问量 1693

猜你喜欢

转载自blog.csdn.net/qq_41342326/article/details/104185250
今日推荐