404. 左葉子之和(某遞迴形式)
阿新 • • 發佈:2019-01-07
計算給定二叉樹的所有左葉子之和。
示例:
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);
}
}