lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1846 随笔 :: 0 文章 :: 109 评论 :: 288万 阅读

1. 题目

 

2. 解法

什么是二叉树的右视图  

二叉树的右视图是指从二叉树的右侧看,能够看到的节点的值的序列

例如,给定一个二叉树:

    1
   / \
  2   3
   \   \
    5   4

从右侧看,能够看到的节点的值是 [1, 3, 4],这就是二叉树的右视图。

一种求解二叉树的右视图的方法是使用层序遍历,每次记录每一层的最后一个节点的值,作为右视图的一部分。

 

实现思路

一种可能的解法是:使用层序遍历,每次记录每一层的最后一个节点的值,作为右视图的一部分

  • 首先,创建一个空的结果列表,用于存放右视图的节点值。
  • 然后,判断根节点是否为空,如果为空,就直接返回空列表。
  • 接着,创建一个队列,用于层序遍历二叉树。将根节点入队。
  • 然后,进入一个循环,当队列不为空时,执行以下操作:
    • 获取当前层的节点数,记为size。
    • 遍历当前层的节点,每次出队一个节点,记为node。
    • 如果当前节点是当前层的最后一个节点(即i == size - 1),就将它的值加入结果列表。
    • 如果当前节点有左子节点,就将左子节点入队。
    • 如果当前节点有右子节点,就将右子节点入队。
  • 最后,返回结果列表。

这样,我们就可以按照从上到下,从右到左的顺序,获取每一层的最右边的节点的值,组成右视图。

 

实现

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static List<Integer> rightSideView(TreeNode root) {
     List<Integer> ans = new ArrayList<>();
     if (root == null) {
         return ans;
     }
 
     Queue<TreeNode> queue = new LinkedList<>();
     queue.add(root);
     while (!queue.isEmpty()) {
         int size = queue.size();
 
         for (int i = 0; i < size; i++) {
             TreeNode node = queue.poll();
             if (i == size - 1) {
                 ans.add(node.val);
             }
 
             if (node.left != null) queue.offer(node.left);
             if (node.right != null) queue.offer(node.right);
         }
     }
 
     return ans;
 }

  

 

3. 总结

posted on   白露~  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2021-04-25 Dubbo源码分析(十)同步调用与异步调用
2021-04-25 Dubbo源码分析(九)负载均衡算法
2021-04-25 Dubbo源码分析(八)集群容错机制
2021-04-25 Dubbo源码分析(七)服务目录
2021-04-25 Dubbo源码分析(六)服务引用的具体流程
2021-04-25 Dubbo源码分析(五)服务暴露的具体流程(下)
2021-04-25 Dubbo源码分析(四)服务暴露的具体流程(上)
点击右上角即可分享
微信分享提示