404.左葉子之和
阿新 • • 發佈:2021-10-09
計算給定二叉樹的所有左葉子之和。
示例:
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; }