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.注意题意是左子叶,是叶子!!
package leetcode;
public class Sum_of_Left_Leaves_404 {
int sum=0;
public int sumOfLeftLeaves(TreeNode root) {
if(root==null){
return 0;
}
DFS(root,false);
return sum;
}
public void DFS(TreeNode node,Boolean isLeft){
if(node.left==null&&node.right==null){
if(isLeft==true){
sum+=node.val;
}
return;
}
if(node.left!=null){
DFS(node.left,true);
}
if(node.right!=null){
DFS(node.right,false);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Sum_of_Left_Leaves_404 s=new Sum_of_Left_Leaves_404();
TreeNode root=new TreeNode(1);
root.left=new TreeNode(2);
root.right=new TreeNode(3);
root.left.left=new TreeNode(4);
root.left.right=new TreeNode(5);
System.out.println(s.sumOfLeftLeaves(root));
}
}
我用的DFS递归,大神用的和我差不多,还有用BFS,对每个treenode进行遍历,也是可以的。
public class Solution {
public int sumOfLeftLeaves(TreeNode root) {
if(root == null || root.left == null && root.right == null) return 0;
int res = 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()) {
TreeNode curr = queue.poll();
if(curr.left != null && curr.left.left == null && curr.left.right == null) res += curr.left.val;
if(curr.left != null) queue.offer(curr.left);
if(curr.right != null) queue.offer(curr.right);
}
return res;
}
}