题目描述:给定二叉树的根节点 root
,返回所有左叶子之和。
思路:
主要就是左叶子节点的判断,要用到父节点!第一次不容易想到!
代码:
1)递归实现
class Solution {
//这里的sum也要用,成员变量,不然作为形参,sum值一直变化?
private int sum = 0;
public int sumOfLeftLeaves(TreeNode root) {
if(root == null) return sum;
dfs(root);
return sum;
}
//递归判断是否为左叶子节点
//要通过父节点来进行判断,因为父节点才能判断当前节点是否是 左子节点
void dfs(TreeNode root){
//此节点为 左叶子节点
if(root.left != null && root.left.left == null && root.left.right == null){
sum += root.left.val;
//这里不能返回,不然同一层的右节点进不去!
}
if(root.left != null) dfs(root.left);
if(root.right != null) dfs(root.right);
}
}
2) 迭代实现
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
//迭代法:
Queue<TreeNode> queue = new LinkedList<>();
int sum = 0;
if(root == null) return sum;
queue.offer(root);
while(!queue.isEmpty()){
root = queue.poll();
if(root.left != null && root.left.left == null && root.left.right == null) sum += root.left.val;
if(root.left != null) queue.offer(root.left);
if(root.right != null) queue.offer(root.right);
}
return sum;
}
}