当前位置:网站首页>【刷题篇】二叉树的右视图
【刷题篇】二叉树的右视图
2022-08-03 21:33:00 【m0_60631323】
一、题目
OJ链接
请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图
示例:
对应的输出为[1,3,5]。
二、题解
解决本题主要 分两个步骤:
- 根据前序和中序构建出二叉树
- 对二叉树进行层次遍历,找到每一层的最右侧的节点
构建二叉树:
参考链接: 二叉树相关OJ题
中序遍历找出最每一层最右侧的节点:
层序遍历的过程
变量size记录的是当前遍历到的层的节点数,我们在入队的时候的顺序是:从左到右依次将当前层的节点加入到队列中,所以在出队的时候,当前层的最右侧的节点一定是该层所有节点中最后一个出队列的
故我们可根据这一特点,增设一个判断条件,但size为0时,此时上一次出的元素就是当前层的最右侧的元素
源码:
public class Solution {
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 求二叉树的右视图 * @param xianxu int整型一维数组 先序遍历 * @param zhongxu int整型一维数组 中序遍历 * @return int整型一维数组 */
int preIndex=0;
HashMap<Integer,Integer> map=new HashMap<>();
public void RootIndex(int[] inorder){
for (int i = 0; i < inorder.length; i++) {
map.put(inorder[i],i);
}
}
public ArrayList<Integer> rightSideView(TreeNode root) {
ArrayList<Integer> res = new ArrayList<Integer>();
Queue<TreeNode> q = new LinkedList<TreeNode>();
q.offer(root);
while(!q.isEmpty()){
//队列中的大小即是这一层的节点树
int size = q.size();
while(size-- != 0){
TreeNode temp = q.poll();
if(temp.left != null)
q.offer(temp.left);
if(temp.right != null)
q.offer(temp.right);
//最右元素
if(size == 0)
res.add(temp.val);
}
}
return res;
}
public int[] solve (int[] xianxu, int[] zhongxu) {
TreeNode root=buildTree(xianxu,zhongxu);
ArrayList<Integer> tmp=rightSideView(root);
int[] arr=new int[tmp.size()];
for(int i=0;i<tmp.size();i++){
arr[i]=tmp.get(i);
}
return arr;
}
public TreeNode buildTree(int[] xianxu,int[] zhongxu ){
RootIndex(zhongxu);
return buildTreeChild(xianxu,zhongxu,0,zhongxu.length-1);
}
public TreeNode buildTreeChild(int[] xianxu,int[] zhongxu,int inbegin,int inend){
if(inbegin>inend){
return null;
}
TreeNode root=new TreeNode(xianxu[preIndex]);
int ri=map.get(xianxu[preIndex]);
preIndex++;
root.left=buildTreeChild(xianxu,zhongxu,inbegin,ri-1);
root.right=buildTreeChild(xianxu,zhongxu,ri+1,inend);
return root;
}
}
边栏推荐
- Often forget HiFlow 】 【 check-in?Use tencent cloud scenario connector to remind you every day.
- 从开发到软件测试:除了扎实的测试基础,还有哪些必须掌握 ?
- CAS: 773888-45-2_BIOTIN ALKYNE_Biotin-alkynyl
- CAS:1620523-64-9_Azide-SS-biotin_biotin-disulfide-azide
- Orcad Capture Cadence 新建原理图多部分smybol和Homogeneous、Heterogeneous类型介绍教程
- 基于DMS的数仓智能运维服务,知多少?
- C. Divan and bitwise operations
- C. Fishingprince Plays With Array--Codeforces Global Round 21
- Cross-end development technical reserve record
- 6. XML
猜你喜欢
【kali-漏洞扫描】(2.1)Nessus解除IP限制、扫描快无结果、插件plugins被删除(中)
MMA安装及使用优化
聚焦开源与联合共创|麒麟软件出席开源峰会欧拉分论坛
如何使用 Jmeter获取登录token并设置为全局变量?
剑指 Offer 07. 重建二叉树
[kali-vulnerability scanning] (2.1) Nessus download and installation (on)
电商数仓ODS层-----日志数据装载
LitJson报错记录
CAS: 773888-45-2_BIOTIN ALKYNE_Biotin-alkynyl
【Odoo】硬核组件开发,全文没一句废话~
随机推荐
不专业面试官的经验总结
CAS:1620523-64-9_Azide-SS-biotin_biotin-disulfide-azide
XSS测试
详解虚拟机!京东大佬出品 HotSpot VM 源码剖析笔记(附完整源码)
Several difficult problems in DDD
【kali-漏洞扫描】(2.1)Nessus下载安装(上)
win10安装及配置Gradle
《富爸爸,穷爸爸》思维导图和学习笔记
AWTK开发编译环境踩坑记录1(编译提示powershell.exe出错)
dataframe 多层索引 更换索引 df.swaplevel(axis=1)
StoneDB 助力 2022 开放原子全球开源峰会
易基因:植物宏病毒组研究:植物病毒的进化与生态 | 顶刊综述
好朋友离职了,一周面试了20多场,我直呼内行
反射机制
开源一夏 |如何优化线上服务器
什么密码,永远无法被黑客攻破?
IDaaS 是什么?一文说清它的价值
dataframe multi-level index replace index df.swaplevel(axis=1)
PyCharm function automatically add comments without parameters
《强化学习周刊》第56期:GraphIRL、REDEEMER & 眼科强化学习的潜在研究