在每个树行中找最大值
思路
层序遍历,取每一层的最大值
方式一:迭代代码
class Solution{
public List<Integer> largestValues(TreeNode root) {
List<Integer> result = new ArrayList<>();
if(root == null){
return result;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
int len = queue.size();
List<Integer> list = new ArrayList<>();
for(int i=0;i<len;i++){
TreeNode tempNode = queue.poll();
list.add(tempNode.val);
if(tempNode.left != null) queue.offer(tempNode.left);
if(tempNode.right != null) queue.offer(tempNode.right);
}
result.add(Collections.max(list));
}
return result;
}
}
方式二:递归代码
class Solution{
public List<Integer> result = new ArrayList<>();
public List<Integer> largestValues(TreeNode root) {
largestValues(root,0);
return result;
}
private void largestValues(TreeNode root,Integer deep){
if(root ==null){
return;
}
// 如果result.size() == deep则表示当前层是第一次被访问,当前结点也就是第一次被访问,将该结点值添加到result中
if(result.size() == deep){
result.add(root.val);
// 否则就表示当前结点并不是当前层第一个被访问的,就需要将当前结点值与当前层已经存储过的结点值作比较,以此更新当前层的最大值
}else{
if(result.get(deep) < root.val){
result.set(deep,root.val);
}
}
deep++;
largestValues(root.left,deep);
largestValues(root.right,deep);
}
}