【515.在每个树行中找最大值】_二叉树_day02

本文介绍了一种算法,用于在二叉树的右侧视角下找到每一层的最大节点值。通过层序遍历和队列操作,确保在遍历过程中记录并返回每层的最大值。
摘要由CSDN通过智能技术生成

1 题目描述

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。515.在每个树行中找最大值
在这里插入图片描述

2 解题思路

二叉树层序遍历的拓展:

  1. 借助队列que来解决这个问题,核心点就是在二叉树每一层上进行操作需要记住保存其左右节点之后的队列que的大小len。
  2. 首先创建一个ArrayList列表res用来保存每一层节点中值最大的数。
  3. 判断root是否为空null,为空则直接返回列表res,结束当前函数。非空则进行后续的操作。
  4. 进入条件为队列que非空的当前型循环①,循环①内部:
    1) 记录此时队列que的大小为len, 设置一个用来临时比较的最大值max (MIN_VALUE)
    2)进入循环②内部:
    • 把队列que的节点弹出并赋给新节点node
    • 将node.val赋给一个新的int变量temp
    • max 取max和temp中的最大值
    • node有左右节点则加入队列que中
    • len–
      3)将每一层的max添加至目标res中
  5. 返回最终的结果res

3 代码

public List<Integer> largestValues(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        if(root == null) return res;

        Queue<TreeNode> que = new LinkedList<>();
        que.offer(root);
        while(!que.isEmpty()){
            int len = que.size();
            int max = Integer.MIN_VALUE;
            while(len>0){
                TreeNode node = que.poll();
                int temp = node.val;
                max = Math.max(temp,max);
                if(node.left != null) que.offer(node.left);
                if(node.right != null) que.offer(node.right);
                len--;
            }
            res.add(max);
        }

        return res;
    }

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值