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; }