问题的实质就是遍历二叉树,然后把满足条件的节点的值取出来进行相加。
遍历的方式两种:递归和迭代
迭代的话用的是栈(DFS)或队列实现(BFS)
递归:
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
if(root==null){
return 0;
}
int ans = 0;
if(root.left!=null){
if(root.left.left==null && root.left.right==null){
ans += root.left.val;
}else{
ans += sumOfLeftLeaves(root.left);
}
}
ans += sumOfLeftLeaves(root.right);
return ans;
}
}
DFS:
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
if(root==null){
return 0;
}
int ans = 0;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode p = stack.pop();
if(p.left!=null){
if(p.left.left==null && p.left.right==null){
ans += p.left.val;
}
stack.push(p.left);
}
if(p.right!=null){
stack.push(p.right);
}
}
return ans;
}
}
BFS:
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
if(root==null){
return 0;
}
int ans = 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
int len = queue.size();
for(int i = 0;i<len;i++){
TreeNode p = queue.poll();
if(p.left!=null){
if(p.left.left==null && p.left.right==null){
ans += p.left.val;
}
queue.add(p.left);
}
if(p.right!=null){
queue.add(p.right);
}
}
}
return ans;
}
}