面试经典(18)--重建二叉树

java二叉树算法面试题大全含答案,月薪20k+的Java面试都问些什么 21二叉树算法刷题LeetCode中文版:二叉树。 阅读详情

题目描述:给定二叉树的前序序列和中序序列--假设没有重复的字符,写一个算法重建这课二叉树。

要求:struct Node{

Node *m_pLeft;

Node *m_pRight;

char  m_nValue;

};

举例:

前序:a b d c e f

中序:d b a e c f

重构的二叉树:

分析:

前序遍历:先访问当前节点,然后前序访问左子树,右子树。

中序遍历:先中序遍历左子树,接着访问当前节点,然后以中序遍历右子树。

根据前序遍历和中序遍历的特点,可以发现如下规律:

前序遍历的每一个节点,都是当前子树的根节点。同时,以对应的节点为边界,就会把中序遍历的序列分隔为左子树和右子树。

前序:a b d c e f,a是根节点

中序:d b a e c f,a是根节点,将中序序列分成两个子树

这样,如果能够找到前序遍历中对应的左右子树,就可以把作为当前的根节点,然后依次递归下去,这样就能够依次恢复左右子树。

代码如下:

struct Node
{
	char m_nValue;
	Node *m_pLeft;
	Node *m_pRight;
};

Node *construct(char *startPreOrder,char *endPreOrder,char *startInOrder,char *endInOrder)
{
	//首先取得根节点,然后建立根节点
	char rootValue=*startPreOrder;
	Node *root=new Node;
	root->m_nValue=rootValue;
	root->m_pLeft=root->m_pRight=NULL;

	//退出条件:当子树仅仅有一个节点。要检测输入是否有效
	if(startPreOrder==endPreOrder)
	{
		//感觉statInOrder==endInOrder这个判断条件可以不要
		if(*startPreOrder==*startInOrder)
			return root;
		else
			throw exception("Invalid input");
	}
	//找到根节点之后,需要从中序序列中查找根节点,有可能找不到,计算左子树长度
	char *rootInOrder=startInOrder;
	while(rootInOrder<endInOrder && *rootInOrder!=rootValue)
		++rootInOrder;
	if(rootInOrder==endInOrder && *rootInOrder!=rootValue)
		throw exception("Invalid input");

	int leftLength=rootInOrder-startInOrder;
	char *leftPreOrderEnd=startPreOrder+leftLength;

	//构建左子树和右子树
	if(leftLength>0)
		root->m_pLeft=construct(startPreOrder+1,leftPreOrderEnd,startInOrder,rootInOrder-1);
	if(leftLength<endPreOrder-startPreOrder)
		root->m_pRight=construct(leftPreOrderEnd+1,endPreOrder,rootInOrder+1,endInOrder);

	return root;
}

Node *construct(char *preOrder,char *inOrder,int length)
{
	if(preOrder==NULL || inOrder==NULL || length<0)
		return NULL;
	return construct(preOrder,preOrder+length-1,inOrder,inOrder+length-1);
}

调用代码:

int main()
{
	char pre[]="abc";
	char in[]="cba";
	Node *root=NULL;
	try{
		root=construct(pre,in,sizeof(pre));
	}catch(exception e){
		cout<<e.what()<<endl;
	}
	return 0;
}


Unity Addressable资源缓存路径自定义指南:告别C盘爆满烦恼 本文详细介绍了如何自定义Unity Addressable系统的资源缓存路径,解决其默认存储在C盘导致的磁盘空间不足问题。通过配置CacheInitializationSettings并编写编辑器脚本,开发者可以将缓存迁移至项目目录,实现资源的集中管理,提升团队协作效率与开发环境一致性。 阅读详情

相关推荐

UniTouch:多模态触觉对齐技术如何重塑零样本跨模态应用

UniTouch模型通过创新的多模态触觉对齐技术,成功将触觉数据映射到通用的视觉-语言嵌入空间,解决了触觉模态的“孤岛困境”。该技术利用对比学习和传感器特定标记,实现了高质量的零样本学习能力,使模型无需额外训练即可完成触觉分类、描述等任务,并能驱动跨模态生成,为机器人、VR和智能制造等领域提供了强大的触觉理解新范式。

weixin_29044713的博客 409

【算法专题】重建二叉树

重建二叉树总结 概述 重建二叉树分为三种类型: (1)中序遍历+前序遍历/后序遍历 重建二叉树; (2)中序遍历+层序遍历 重建二叉树; (3)前序遍历+给定叶节点 重建二叉树。 下面分别给出这三类重建二叉树的讲解。 类型一:中序+前序/后序 AcWing 1631. 后序遍历 问题描述 问题链接:AcWing 1631. 后序遍历 分析 对于给定前序遍历的区间[pl, pr]和中序遍历的区间[il, ir],则待构造的树的根节点为preorder[pl],

weixin_42638946的博客 5180

Web端百度离线地图3.0实战:从零搭建到私有化部署

本文详细介绍了Web端百度离线地图3.0的完整实战流程,从核心SDK本地化、功能模块下载到地图瓦片部署。通过逐步修改代码与配置,实现在无外网环境下的私有化部署,解决了内网或网络不稳定场景下的地图应用需求,并提供了关键的避坑指南。

n7o8p的博客 714

树:重建二叉树

先序:根左右中序:左根右因此给出的先序,第一个元素就是根,要想确定左先序、左中序、右先序、右中序,需要进中序序列查询根的位置。则所查询到的位置的左侧是左中序,右侧是右中序。由于知道了左中序和右中序,就能跟着确定左子树和右子树的节点个数,则可以确定出左先序、右先序。知道左先序、左中序,就可根据这两个序列去求解左子树,知道右先序、右中序,可根据这两个序列去求解右子树。可以看出这是个递归的过程。递归出口...

温姑娘的博客 343

使用jsch和commons-pool2为sftp创建连接池

使用jsch和common-pool2为sftp创建连接池

文若书生的专栏 3280

Proteus仿真实战:基于IIC驱动SSD1306的0.96英寸OLED显示方案解析

本文详细解析了在Proteus仿真环境中基于IIC驱动SSD1306的0.96英寸OLED显示方案。从硬件搭建、IIC接口连接、软件驱动移植到常见问题排查,提供了全面的实战指导,帮助开发者快速实现OLED显示功能并优化性能。

weixin_28724661的博客 770

重建二叉树(含思路解答示意图)【剑指offer——JAVA实现】

【考点:树】重建二叉树题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * public class TreeNode { * ...

罗先森何其有幸的博客 826

FastGPT智能体开发:FastGPT OpenAPI 知识库接口

FastGPT OpenAPI 知识库接口

王国平的博客 323

二叉树——重建二叉树

二叉树——重建二叉树 例如,某二叉树为: 前序遍历为:(4,7,9,2,1,5,6) 中序遍历为:(7,9,4,1,2,6,5) 后序遍历为:(9,7,1,6,5,2,4) 1.前序遍历+中序遍历 =&amp;gt; 重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 代码 #include &amp;lt;iostream&amp;gt; #in...

hh66__66hh的博客 3800

Python爬虫:实时交通流量数据爬取与路况分析

随着城市化进程的不断推进,交通流量的管理与预测已成为智能交通系统的重要研究方向。交通流量数据不仅为城市交通管理提供了科学依据,还为驾驶员提供了实时路况信息,帮助其做出更加合理的出行决策。通过爬虫技术,我们可以实时获取城市的交通流量数据,从而分析路况,优化交通管理。在这篇博客中,我们将介绍如何使用Python编写一个爬虫来爬取实时交通流量数据,分析道路的交通状况。我们将使用最新的技术工具来构建爬虫,包括。

2201_76125261的博客 1267

ABAP CDS 视图参数 parameter_list 详解与最佳实践:从语法、作用域到可运行范例

本文系统梳理了ABAP CDS视图的WITH PARAMETERS定义与使用。主要内容包括:1)参数声明语法及其在整条SELECT语句中的贯穿使用;2)参数在WHERE/HAVING/ON等位置的多种写法(:pname和$parameters.pname);3)参数在航空公司航线筛选等实际业务场景中的应用;4)参数与会话变量的协作策略;5)在JOIN ON、HAVING、CASE等高级用法中的实践;6)提供完整的CDS视图与ABAP程序示例,展示参数声明、使用及Open SQL传参方式。所有内容均基于SAP

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 372

重建二叉树问题分析心理

题目要求:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。【直观感受1】二叉树的三种遍历方式无论是本科考试、考研考试还是在工作的笔试和面试中均为重点内容。首先我们需要知道的是三种遍历(前、中、后)的访问顺序。前序遍...

王喆峰的博客 489

【2026最新版】python点云处理算法汇总(长期更新版)

python点云处理算法整理。博客长期更新,最近一次更新时间为:2026年10月4日。

点云侠的博客 42万+

别再翻了,面试二叉树看这 11 个就够了~

写在前边 数据结构与算法: 不知道你有没有这种困惑,虽然刷了很多算法题,当我去面试的时候,面试官让你手写一个算法,可能你对此算法很熟悉,知道实现思路,但是总是不知道该在什么地方写,而且很多边界条件想不全面,一紧张,代码写的乱七八糟。如果遇到没有做过的算法题,思路也不知道从何寻找。面试吃了亏之后,我就慢慢的做出总结,开始分类的把数据结构所有的题型和解题思路每周刷题做出的系统性总结写在了 Github...

小鹿动画学编程 12万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

二叉树面试常考题【JAVA】

转:http://www.2cto.com/kf/201311/259183.html package BinaryTreeSummary; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; impor

bin的主栏 709

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【转载】别再翻了,面试二叉树看这 11 个就够了

本文转载自博客:https://blog.csdn.net/qq_36903042/article/details/100798101 -----------------------------------------------------------------------------------------------------------------------------------...

woaitingting1985的博客 225

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

二叉树为空意味着二叉树_别再翻了,百度大牛整理的面试二叉树有这 11 个就够了~...

前言数据结构与算法:不知道你有没有这种困惑,虽然刷了很多算法题,当我去面试的时候,面试官让你手写一个算法,可能你对此算法很熟悉,知道实现思路,但是总是不知道该在什么地方写,而且很多边界条件想不全面,一紧张,代码写的乱七八糟。如果遇到没有做过的算法题,思路也不知道从何寻找。面试吃了亏之后,我就慢慢的做出总结,开始分类的把数据结构所有的题型和解题思路每周刷题做出的系统性总结在下面。二叉树题目共有 11...

weixin_36204513的博客 529

剑指offer面试题5-重建二叉树

一 题目描述   输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 二 解法1 1 分析   重建二叉树的经典做法是和遍历二叉树一样的思想,不管是前序、中序或者是后序遍历都是利用递归的思想...

weixin_30332705的博客 122

二叉树与二叉搜索树:Python实现与面试高频题解

想要高效掌握数据结构与算法面试中的二叉树与二叉搜索树吗?🤔 作为一名Python开发者,理解这两种数据结构不仅能提升你的编程技能,还能在技术面试中脱颖而出。本文将为你提供完整的二叉树与二叉搜索树Python实现指南,并解析面试中最常见的高频题目。无论你是初学者还是准备面试的开发者,这篇终极指南都将帮助你快速掌握核心概念和解题技巧!🚀 ## 什么是二叉树?🌳 二叉树是一种特殊的树结构,每个

gitblog_00306的博客 794

剑指 Offer(第2版)面试题 7:重建二叉树

剑指 Offer(第2版)面试题 7:重建二叉树

ProgramNovice的博客 512

【面试题6】重建二叉树

【题目描述】 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。 【解决方案】 首先理解前序遍历(PreOrder),中序遍历(InOrder),后序遍历(PostOrder)的区别,并能在纸上根据前两种遍历,写出后一种遍历,基本就能写出本题的代码,不赘述。 我的代码实现,仅供参考: 1 /// <summary> 2 ...

aejt95023的博客 107

剑指offer——面试题7:重建二叉树

1 // 面试题7:重建二叉树 2 // 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输 3 // 入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1, 4 // 2, 4, 7, 3, 5, 6, 8}和中序遍历序列{4, 7, 2, 1, 5, 3, 8, 6},则重建出 5 // 图2.6所示的二叉树并输出它的...

weixin_33743880的博客 189

java二叉树面试题总结,挥泪整理面经

20个二叉树面试高频 0. 几个概念 1. 求二叉树中的节点个数 2. 求二叉树的最大层数(最大深度) 3. 先序遍历/前序遍历 4. 中序遍历 5. 后序遍历 6. 分层遍历 7. 求二叉树第K层的节点个数 8. 求二叉树第K层的叶子节点个数 9. 判断两棵二叉树是否结构相同 10. 判断二叉树是不是平衡二叉树 11. 求二叉树的镜像 12. 求二叉树中两个节点的最低公共祖先节点 13. 求二叉树的直径 14. 由前序遍历序列和中序遍历序列重建二叉树 15. 判断二叉树是不是完全二叉树 16. 树的子结

m0_57699613的博客 452
上一篇: 面试经典(19)--求二叉树中节点的最大距离
下一篇: 面试经典(17)--二叉树中和为某一值的路径
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值