515. Find Largest Value in Each Tree Row
- Total Accepted: 3223
- Total Submissions: 6121
- Difficulty: Medium
- Contributors: love_FDU_llp
You need to find the largest value in each row of a binary tree.
Example:
Input: 1 / \ 3 2 / \ \ 5 3 9 Output: [1, 3, 9]
DFS:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { List<Integer>list = new ArrayList<Integer>(); public void dfs(TreeNode root,int level){ if(root == null){ return ; } if(list.size() < level + 1){ list.add(Integer.MIN_VALUE); } list.set(level,Math.max(root.val,list.get(level))); dfs(root.left,level+1); dfs(root.right,level+1); } public List<Integer> largestValues(TreeNode root) { if(root == null){ return list; } dfs(root,0); return list; } }
BFS:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<Integer> largestValues(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); Queue<TreeNode> q1 = new LinkedList<TreeNode>(); Queue<TreeNode> q2 = new LinkedList<TreeNode>(); if(root == null){ return list; } q1.add(root); while(!q1.isEmpty()){ while(!q1.isEmpty()){ q2.add(q1.poll()); } int Max = Integer.MIN_VALUE; while(!q2.isEmpty()){ TreeNode tempNode = q2.poll(); Max = Math.max(Max,tempNode.val); if(tempNode.left != null){ q1.add(tempNode.left); } if(tempNode.right != null){ q1.add(tempNode.right); } } list.add(Max); } return list; } }