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; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享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源码分析(四)服务暴露的具体流程(上)