题目
思路
本题可采用层序遍历法
层序遍历法除了要返回的list之外还要借助queue这个数据结构
如果根节点为空,则直接返回
当节点不为空时,将其加入到队列中,当队列不为空的时候,开始遍历
先定义一个整数size用来表示队列的长度que.size(),然后定义一个int类型的max,将其赋值为int的最小值Integer.MIN_VALUE,注意这里不能将其初始化为0,因为二叉树的值有可能为负数,-231 <= Node.val <= 231 - 1
循环遍历这一层,将最大值找出来
将每一层的最大值加入到result
返回result
代码
class Solution {
public List<Integer> largestValues(TreeNode root) {
List<Integer> result = new ArrayList<>();
Queue<TreeNode> que = new LinkedList<>();
if(root==null){
return result;
}
que.offer(root);
while(!que.isEmpty()){
int len = que.size();
int max=Integer.MIN_VALUE;
while(len-->0){
TreeNode node = que.poll();
if(node.val>max){
max=node.val;
}
if(node.left!=null){
que.offer(node.left);
}
if(node.right!=null){
que.offer(node.right);
}
}
result.add(max);
}
return result;
}
}
收获
第N次将定义Queue时应该new LinkedList<>()写成new Queue<>(),是new LinkedList<>()!new LinkedList<>()!new LinkedList<>()!
int型最小值为Integer.MIN_VALUE