Find the sum of all left leaves in a given binary tree.
Example:
3
/ \
9 20
/ \
15 7
There are two left leaves in the binary tree, with values 9 and 15 respectively. Return 24.
我们递归dfs的时候,是求解的全部子树,但是如果我们弄个标志位,判断是不是左子树,那么那个递归一样可以用。
public int sumOfLeftLeaves(TreeNode root) {
return dfs(root, false);
}
private int dfs(TreeNode root, boolean isLeaf) {
if (root == null)
return 0;
if (root.left == null && root.right == null && isLeaf)
return root.val;
return dfs(root.left, true) + dfs(root.right, false);
}
笨一点的办法。但是也能AC。
public int sumOfLeftLeaves1(TreeNode root) {
if (root == null)
return 0;
else if (root.left == null && root.right == null)
return 0;
else {
return ((root.left != null && root.left.left == null && root.left.right == null) ? root.left.val
: sumOfLeftLeaves(root.left))
+ ((root.right != null && (root.right.left != null || root.right.right != null)) ? sumOfLeftLeaves(root.right)
: 0);
}
}