【队列 + 宽搜(BFS)】4. 在每个树⾏中找最⼤值(medium)
4. 在每个树⾏中找最⼤值(medium)
- 4. 在每个树⾏中找最⼤值(medium)
- 题⽬描述:
- 解法(bfs):
- 算法思路:
- 算法代码:
4. 在每个树⾏中找最⼤值(medium)
题⽬链接:515. 在每个树⾏中找最⼤值
题⽬描述:
给定⼀棵⼆叉树的根节点 root ,请找出该⼆叉树中每⼀层的最⼤值。
⽰例 1:
输⼊: root = [1,3,2,5,3,null,9]
输出: [1,3,9]
⽰例 2:
输⼊: root = [1,2,3]
输出: [1,3]
解法(bfs):
利用层序遍历,统计出每一层的最大值
算法思路:
层序遍历过程中,在执⾏让下⼀层节点⼊队的时候,我们是可以在循环中统计出当前层结点的最⼤值的。
因此,可以在 bfs 的过程中,统计出每⼀层结点的最⼤值。
算法代码:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* * TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution
{public List<Integer> largestValues(TreeNode root) {List<Integer> ret = new ArrayList<>();if(root == null) return ret;Queue<TreeNode> q = new LinkedList<>();q.add(root);while(!q.isEmpty()){int sz = q.size();int tmp = Integer.MIN_VALUE;for(int i = 0; i < sz; i++){TreeNode t = q.poll();tmp = Math.max(tmp, t.val);if(t.left != null) q.add(t.left);if(t.right != null) q.add(t.right);}ret.add(tmp);}return ret;}
}