515. 在每个树行中找最大值
题目描述
给定一棵二叉树的根节点 root
,请找出该二叉树中每一层的最大值。
输入输出
1 2
| 输入: root = [1,3,2,5,3,null,9] 输出: [1,3,9]
|
基本思路
深搜:定义一个currHeight
标记目前遍历的高度 更新最大值 时复$O(n)$ 空复$O(height)$
广搜:层序遍历 对每一层的所有节点大小作比较 时复$O(n)$ 空复$O(n)$
java实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| class Solution { public List<Integer> largestValues(TreeNode root) { List<Integer> result = new ArrayList<Integer>(); if(root == null) return result; dfs(result, root, 0); return result; }
public void dfs(List<Integer> res, TreeNode root, int currHeight){ if(currHeight == res.size()){ res.add(root.val); }else{ res.set(currHeight, Math.max(res.get(currHeight), root.val)); } if(root.left != null){ dfs(res, root.left, currHeight+1); } if(root.right != null){ dfs(res, root.right, currHeight+1); } } }
class Solution { public List<Integer> largestValues(TreeNode root) { List<Integer> result = new ArrayList<Integer>(); if(root == null) return result; List<Integer> res = new ArrayList<Integer>(); Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); while(!queue.isEmpty()) { int maxVal = Integer.MIN_VALUE; int currLevel = queue.size(); for(int i = 1; i <= currLevel; i++) { TreeNode temp = queue.poll(); maxVal = Math.max(maxVal, temp.val); if(temp.left != null) queue.offer(temp.left); if(temp.right != null) queue.offer(temp.right); } result.add(maxVal); } return result; } }
|