计算给定二叉树的所有左叶子之和。
示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
class Solution {
int sum = 0;
public int preSum(TreeNode root,TreeNode last) {
if(root != null){
if(last != null && last.left == root && root.left == null && root.right == null){
sum += root.val;
}
preSum(root.left,root);
preSum(root.right,root);
return sum;
}
return 0;
}
public int sumOfLeftLeaves(TreeNode root) {
if(root == null)
return 0;
return preSum(root,null);
}
}
如果它是父节点的左孩子,ok==》加!
这个形式:有一个全局变量,计算时不用加递归。
另一种形式:
class Solution {
public boolean isLeaf(TreeNode root){
if(root == null)
return false;
if(root.left == null && root.right == null)
return true;
return false;
}
public int sumOfLeftLeaves(TreeNode root) {
if(root == null)
return 0;
if(isLeaf(root.left))
return root.left.val += sumOfLeftLeaves(root.right);
else
return sumOfLeftLeaves(root.left) + sumOfLeftLeaves(root.right);
}
}