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;
}
}