给一棵二叉树,求叶子节点的和。
思路:
方法一:
直接BFS,记录下每层的和,最后返回的就是最后一层的和。
public int deepestLeavesSum(TreeNode root) {
int res = 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(queue.size() > 0) {
int size = queue.size();
res = 0;
for(int i = 0; i < size; i++) {
TreeNode cur = queue.poll();
res += cur.val;
if(cur.left != null) queue.add(cur.left);
if(cur.right != null) queue.add(cur.right);
}
}
return res;
}
方法二:
叶子节点肯定是left和right都为null的层,
为了记录是同一层,用一个leafLevel记录当前层数,是同一层就相加,
新的一层就重新让sum = root.val。
class Solution {
int res = 0;
int leafLevel = 0;
public int deepestLeavesSum(TreeNode root) {
helper(root, 0);
return res;
}
void helper(TreeNode root, int level) {
if(root == null) return;
if(root.left == null && root.right == null && level == leafLevel) {
res += root.val;
}
if(root.left == null && root.right == null && level > leafLevel) {
leafLevel = level;
res = root.val;
}
helper(root.left, level + 1);
helper(root.right, level + 1);
}
}