【题目】404. 左叶子之和
计算给定二叉树的所有左叶子之和。
示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
【解题思路1】DFS
/**
* 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) {
return sumOfLeftLeavesHelper(root, false);
}
public int sumOfLeftLeavesHelper(TreeNode root, boolean flag) {
if (root == null) {
return 0;
}
int leave = 0;
if (flag && root.left == null && root.right == null) {
leave = root.val;
}
int left = sumOfLeftLeavesHelper(root.left, true);
int right = sumOfLeftLeavesHelper(root.right, false);
return left + right + leave;
}
}
///精简写法
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
if(root == null)
return 0;
if(root.left != null && root.left.left == null && root.left.right == null)
return root.left.val + sumOfLeftLeaves(root.right);
return sumOfLeftLeaves(root.left) + sumOfLeftLeaves(root.right);
}
}
【解题思路2】迭代
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
if(root == null) return 0;
int sum = 0;
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);
while(!q.isEmpty())
{
TreeNode cur = q.poll();
if(cur.right != null)
q.offer(cur.right);
if(cur.left != null && cur.left.left == null && cur.left.right == null)
sum += cur.left.val;
else if(cur.left != null)
q.offer(cur.left);
}
return sum;
}
}