404.左叶子之和
计算给定二叉树的所有左叶子之和。
示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
class Solution {
int pathSum;
public int sumOfLeftLeaves(TreeNode root) {
if(root==null){
return 0;
}
if(root.left==null && root.right==null){
return 0;
}
TreeNode left=root.left;
if(left!=null && left.left==null && left.right==null){
pathSum+=left.val;
}
sumOfLeftLeaves(root.left);
sumOfLeftLeaves(root.right);
return pathSum;
}
}
public int sumOfLeftLeaves(TreeNode root) {
if(root==null){
return 0;
}
if(root.left==null && root.right==null){
return 0;
}
TreeNode left=root.left;
int res=0;
if(left!=null && left.left==null && left.right==null){
res+=left.val;
}
return sumOfLeftLeaves(root.left) + sumOfLeftLeaves(root.right)+res;
}
513. 找树左下角的值
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例 1:

输入: root = [2,1,3]
输出: 1
示例 2:

输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7
思路:层序遍历
class Solution {
public int findBottomLeftValue(TreeNode root) {
TreeNode cur=root;
LinkedList<TreeNode> queue=new LinkedList<>();
queue.add(cur);
int curLevel=0;
int lastVal=0;
HashMap<TreeNode,Integer> levelMap=new HashMap<>();
levelMap.put(root,1);
while(!queue.isEmpty()){
cur=queue.poll();
int level=levelMap.get(cur);
if(level!=curLevel){
lastVal=cur.val;
curLevel++;
}
if(cur.left!=null){
queue.add(cur.left);
levelMap.put(cur.left,level+1);
}
if(cur.right!=null){
queue.add(cur.right);
levelMap.put(cur.right,level+1);
}
}
return lastVal;
}
}
public int findBottomLeftValue(TreeNode root) {
LinkedList<TreeNode> queue=new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
root=queue.poll();
if(root.right!=null){
queue.add(root.right);
}
if(root.left!=null){
queue.add(root.left);
}
}
return root.val;
}

浙公网安备 33010602011771号