计算给定二叉树的所有左叶子之和。
示例:
3
/
9 20
/
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
。
**思路:**求所有左叶子之和需要满足两个条件:
- 是左节点(root.left!=null)
- 是叶子节点(root.left.left == null && root.left.right == null)
综上:必须通过节点的父节点去判断它是不是左叶子节点
public int sumOfLeftLeaves(TreeNode root) {
List<Integer> list = new ArrayList<>();
getNum(root,list);
int count=0;
for(Integer i : list){
count+=i.intValue();
}
return count;
}
//整体还是采用后序遍历的方式
public void getNum(TreeNode root,List<Integer> list){
if(root==null) return;
if(root.left!=null&&root.left.right==null&&root.left.left==null){
list.add(root.left.val);
}
getNum(root.left,list);
getNum(root.right,list);
}
迭代法
public int sumOfLeftLeaves(TreeNode root) {
int count=0;
if(root==null) return count;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
int size=queue.size();
for(int i=0;i<size;i++){
TreeNode node=queue.poll();
//关键判断条件
if(node.left!=null&&node.left.left==null&&node.left.right==null){
count+=node.left.val;
}
if(node.left!=null) queue.offer(node.left);
if(node.right!=null) queue.offer(node.right);
}
}
return count;
}
Leetcode513 给定一个二叉树,在树的最后一行找到最左边的值。
public int findBottomLeftValue(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int result=0;
while(!queue.isEmpty()){
int size=queue.size();
for(int i=0;i<size;i++){
TreeNode node=queue.poll();
if(i==0) result=node.val;
if(node.left!=null) queue.offer(node.left);
if(node.right!=null) queue.offer(node.right);
}
}
return result;
}