计算给定二叉树的所有左叶子之和。
示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
解答:
在遍历树的左右子树的时候传入一个信号量,-1代表左遍历,+1代表右遍历。
当信号量为-1,且该节点为叶子结点时,该节点为左叶子节点,将其值返回。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
if (root == null) return 0;
return walk(root.left, -1) + walk(root.right, 1);
}
public int walk(TreeNode root, int step){
if (root == null) return 0;
if (root.left == null&& root.right == null && step == -1) {
return root.val;
}
return walk(root.left, -1) + walk(root.right, 1);
}
}