二叉树的构造和递归算法

遍历二叉树的各种操作(非递归遍历) 先使用先序的方法建立一棵二叉树,然后分别使用递归与非递归的方法实现前序、中序、后序遍历二叉树,并使用了两种方法来进行层次遍历二叉树,一种方法就是使用STL中的queue,另外一种方法就是定义了一个数组队列,分别使用了front和rear两个数组的下标来表示入队与出队,还有两个操作就是求二叉树的深度、结点数。。。 #include #include #include using namespace 阅读详情

    如果同时知道一颗二叉树的先序序列和中序序列,或者同时知道中序序列和后序序列,就能确定这颗二叉树。

以下是通过先序序列和中序序列来确定二叉树。

先序遍历(根-左-右):

先访问根结点,再先序遍历左子树,再先序遍历右子树。

中序遍历(左-根-右):

先中序遍历左子树,再访问根结点,最后中序遍历右子树。

后序遍历(左-右-根):

先后序遍历左子树,再后序遍历右子树,最后访问根结点。

注:详细说明已经注释在以下代码中

#include <iostream>

using namespace std;

//初始化二叉树结构体
typedef struct Btree
{
	char data;	//节点
	struct Btree *lchild;	//左子树指针
	struct Btree *rchild;	//右子树指针

}BTREE,*btree;

//构造二叉树
btree CreateBtree(char *pre,char *mid,int n)
{
	char *p = NULL;
	BTREE *q = NULL;
	if (n <= 0)
		return NULL;
	q = (BTREE*)malloc(sizeof(BTREE));
	q->data = *pre;	//获得首节点(*pre指向先序的第一个结点)

	p = mid;	//使指针p指向中序指针mid

	/*因为mid指向的是中序的第一个结点,
	  所以mid+n,才能遍历完中序的所有结点
	*/
	for (p; p < mid + n; p++)	//在mid中查找等于首节点的位置
	{
		if (*p == *pre)	//如果*p等于首节点就跳出
			break;
	}

	/*注意上面的for循环,p一直在++,
	  所以p-mid(即p当前所指的位置减去中序首结点的位置)可以得到k
	*/
	int k = p - mid;	//获得首节点的位置

	/*k是左子树的结点数目
	  n是所有的结点数,所有n-k-1就是右子树的结点数目
	  pre+1 表示指向左子树的第一个结点
	  pre+1+k 表示指向右子树的第一个结点
	
	*/
	q->lchild=CreateBtree(pre+1, mid, k);	//构造左子树
	q->rchild=CreateBtree(pre+1+k, p+1, n-k-1);	//构造右子树

	return q;
}

//递归算法
//先序遍历
void PreOrderTraverse(btree T)
{
	if (T){
		cout << T->data << ' ';
		PreOrderTraverse(T->lchild);	//遍历左子树
		PreOrderTraverse(T->rchild);	//遍历右子树
	}
}

//中序遍历
void InOrderTraverse(btree T)
{
	if (T){
		InOrderTraverse(T->lchild);	//遍历左子树
		cout << T->data << ' ';
		InOrderTraverse(T->rchild);	//遍历右子树
	}

}


int main()
{
	BTREE *b = NULL;
	char pre[] = "ABC";	//先序
	char in[] = "ACB";	//中序
	b = CreateBtree(pre, in, 3);
	cout << "先序遍历二叉树:";
	PreOrderTraverse(b);
	cout << endl;
	cout << "中序遍历二叉树:";
	InOrderTraverse(b);

	return 0;
}

 

RocketMQ 为什么要自己做一个 NameServer ?RocketMQ 5.x 版本中的 proxy、controller 和 container 分别有什么用 ? 1.独立运行的分散结构 2.简化实现,容忍部分数据不一致 Proxy:多语言支持、简化开发 Controller: 提高 Broker 的性能 Container:提高资源利用率,平衡负载 阅读详情

相关推荐

【IC】Redhawk-SC输入件配置

Redhawk sc

u011808788的博客 1776

一文搞懂二叉树的递归实现原理(图解)

一文搞懂二叉树的递归实现原理(图解) 1、活动记录 调用函数时会发生genbg什么?如果这个函数存在形参,形参就初始化为实参传递来的值。另外,函数结束后,系统要知道从哪里继续执行程序。而递归的实现就需要知道 从哪里继续执行。指示函数从何处调用的信息保存在系统中。为了做到这一点,返回地址被存储在主内存中预留的特定区域。 对于函数调用来说,需要存储的信息不只是返回地址。因此使用栈进行动态分配效果会好一些。那么调用函数时,需要保存哪些信息? 每个函数(包括主函数main())的状态由以下因素决定:函数中的所有局部

qq_38537501的博客 6762

VCS多lib编译实战:如何高效处理Verilog模块重命名与分开编译

本文深入探讨了在复杂SoC设计中,如何利用VCS工具实现多库编译,以高效处理Verilog模块重命名与分开编译的工程难题。通过解析synopsys_sim.setup配置、Config映射机制,并提供完整的自动化脚本实战指南,帮助工程师构建健壮、可维护的编译环境,从而显著提升大型项目的编译效率和代码管理灵活性。

weixin_29169505的博客 357

二叉树创建的两种方法(图解)

创建二叉树的两种方法

在夜里行走的博客 1万+

Unity游戏接入穿山甲广告SDK全攻略:从零到上线的避坑指南

本文为Unity开发者提供了接入穿山甲广告SDK的完整实战指南。详细解析了从账号注册、应用创建到Unity插件集成、安卓与iOS平台打包配置的全流程,并重点分享了广告加载失败、展示异常等常见问题的排查与解决方案,帮助开发者高效实现游戏广告变现。

weixin_29015899的博客 535

叶绿体基因组提交NCBI全流程避坑指南

叶绿体基因组作为环状细胞器DNA,其数据提交并非简单上传,而是需严格遵循INSDC标准的学术出版行为。其核心原理在于元数据完整性、拓扑结构语义一致性与分类学路径精确匹配;技术价值体现在保障序列可追溯、可复现、可互操作;典型应用场景涵盖植物系统发育、条形码开发及合成生物学底盘构建。实践中,FASTA头行格式、feature table嵌套规则、taxid绑定及BankIt静默校验等环节极易引发失败。本文聚焦NCBI|叶绿体基因组数据上传中的高频报错与隐性约束,提供面向生物信息工程师的实操级规范解析。

weixin_31960565的博客 321

二叉树-构造二叉树

构造二叉树的过程,如何正确的写出各个子序列的边界是有些困难的,需要在稿纸上认真分析整个过程,确保边界不出错。两种构造方式代码略有不同,对于前序序列的处理,每次递归时都会往后移动一步,因为根结点已经处理过了,避免重复处理。//后移一步后序序列的根结点处理是通过修改后序序列的长度,避免重复处理根结点。//后序遍历序列减1。

qq_53280985的博客 1350

主流双目相机技术参数横向评测:从ZED到INDEMIND的深度解析

本文对主流双目相机进行了深度横向评测,涵盖ZED、Bumblebee、Leap Motion、DUO 3D及INDEMIND等国内外产品。文章详细解析了分辨率、帧率、视场角、基线等核心参数,并结合科研、机器人导航、无人机、工业检测等典型应用场景,提供了实战选型指南,帮助读者根据具体需求挑选最合适的双目视觉解决方案。

weixin_29212867的博客 640

【数据结构】二叉树的遍历递归算法详解

int val;}BTNode;

2302_76305195的博客 3221

回归预测 | MATLAB实现MPR多元多项式回归

回归预测 | MATLAB实现MPR多元多项式回归

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 1645

ConvNeXt 系列改进:二次创新 ConvNeXt:结合 RepVGG 结构重参数化,训练多分支、推理单路

2026年的视觉模型赛道呈现出一种有趣的“返璞归真”趋势——在Transformer狂飙数年之后,卷积网络正以全新的姿态回归。这其中,ConvNeXt无疑是纯卷积阵营中最耀眼的明星。从2022年Meta AI首次提出至今,ConvNeXt系列已经走过了近四年的演进之路,衍生出ConvNeXt V2、E-ConvNeXt等多个增强版本。ConvNeXt的7×7深度卷积带来了不错的感受野,却也埋下了推理效率的隐患。

ZXSXJ的博客 234

【数据结构】一文带你掌握二叉树的构造与应用

还在觉得二叉树难吗?快来,一文带你掌握二叉树,构造,前中后遍历......

是小辰 1302

别再只会复制Haar级联代码了!OpenCV人脸检测全方案深度解析,从原理到工业级落地

通用预训练模型在你的业务场景效果不好时,用自己的业务数据集训练专属的级联器,是提升精度的终极方案,OpenCV自带和工具,支持自定义Haar/LBP级联器训练。场景首选方案次选方案新手入门学习Haar级联分类器LBP级联分类器嵌入式轻量固定场景LBP级联分类器YuNet轻量版工业级落地项目(99%场景)DNN+YuNetMTCNN多人脸+小目标复杂场景DNN+YuNet自定义微调模型同时做人脸+其他目标检测。

2601_94871597的博客 379

【笔记】二叉树递归算法和非递归算法的实现 先序/中序/后续遍历 打印结点以及顺序数 构造二叉树

先序遍历和中序遍历 先序: void preorder(bnode *t) { if(t!=NULL) { visit(t); preorder(t->lchild); preorder(t->rchlid); } } 中序: void inorder(bnode *t) { if(t!=NULL) { inorder(t->lchild);

qq_41358574的博客 519

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

二叉树中序非递归遍历算法和构造二叉线索树算法的理解

二叉树中序非递归遍历算法: 先将左子树放进栈中,无左子树时出栈,从右子树开始,继续对右子树循环。 代码如下: void inOrder2(BinTree *root) //非递归中序遍历 2 { 3 stack<BinTree*> s; 4 BinTree ...

weixin_30501857的博客 192

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【算法】递归+深搜+哈希表:889.根据前序和后序遍历构造二叉树

递归+深搜+哈希表解决leetcode889.根据前序和后序遍历构造二叉树

m0_73726899的博客 1186

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Leetcode105. 从前序与中序遍历序列构造二叉树 递归的优化和栈的实现方法的算法解析

解释栈实现算法中比较难理解的地方

llll1515的博客 420

【数据结构与算法】根据后序遍历序列和中序遍历序列构造二叉树 C++实现(二叉树+二叉链表+递归)

给定一棵二叉树的后序遍历序列和中序遍历序列in[s2..t2],设二叉树采用二叉链表存储,设计一个算法构造这棵二叉树。请使用递归方法解决。

HEX9CF的技术博客 1166

【算法入门&amp;二叉树】从先中后序的遍历到用中后序列构造二叉树 如何抵挡递归法该死的魅力_ab16 实现二叉树先序,中序和后序遍历

本专栏收录的均为牛客网的算法题目,内含链表、双指针、递归、动态规划、基本数据结构等算法思想的具体运用。牛客网不仅有大量的经典算法题目,也有大厂的面试真题,面试、找工作完全可以来这里找机会。此外,网站内的编码主题多样化,调试功能可运用性强,可谓是非常注重用户体验。这么好的免费刷题网站还不快入手吗,快去注册开启算法百炼成神之路吧!

2401_84616027的博客 978

二叉树的拷贝构造函数(递归与非递归)

二叉树在学习过程中的探索——构造 二叉树的拷贝构造函数 二叉树是数据结构中非常重要的一章,与之前的数组、链表之类的靠循环的章节在难度上有了一个小的飞跃,这是因为二叉树要用到很多关于递归的算法。但是二叉树真的难的地方并不是递归,而是如何不用递归(用栈)来实现功能。 1. 二叉树的一些元素 (1)二叉树的节点 一个二叉树是由很多很多个节点组成的,所以要构造有个二叉树就必须准备好组成这个大树的零件—...

weixin_44800756的博客 2637

【算法入门&amp;二叉树】从先中后序的遍历到用中后序列构造二叉树 如何抵挡递归法该死的魅力_ab16 实现二叉树先序,中序和后序遍历(2)

本专栏收录的均为牛客网的算法题目,内含链表、双指针、递归、动态规划、基本数据结构等算法思想的具体运用。牛客网不仅有大量的经典算法题目,也有大厂的面试真题,面试、找工作完全可以来这里找机会。此外,网站内的编码主题多样化,调试功能可运用性强,可谓是非常注重用户体验。这么好的免费刷题网站还不快入手吗,快去注册开启算法百炼成神之路吧!

2401_84170337的博客 816

【算法入门&amp;二叉树】从先中后序的遍历到用中后序列构造二叉树 如何抵挡递归法该死的魅力_ab16 实现二叉树先序,中序和后序遍历(1)

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新需要这份系统化资料的朋友,可以戳这里获取本题源码: 重要注释:利用了 无序 的哈希 容器,解法巧妙,快来围观!刚看到题目不要慌,我们知道后序遍历的步骤是:左、右、根,说明后序序列的最后一个元素就是二叉树的根结点。而中序遍历的步骤是:左、根、右,那么我们只要知

2401_84616027的博客 312

从先序与中序遍历序列构造二叉树

从前序与中序遍历序列构造二叉树

hahaha_1112的博客 902

根据中序遍历和后序遍历构造二叉树

根据一棵树的中序遍历与后序遍历构造二叉树。 思路: 根据后序遍历,先找到这棵树的根节点的值,也就是数组中最后一个节点(数组长度-1)的位置,由此创建根节点。 然后在中序遍历中找到根的值所在的下标,切出左右子树的前序和中序。 注意:如果后序遍历的数组长度为0,说明是一棵空树。 下面用具体的例子来说明: 中序:CDBAE 后序:DCBEA 1、由后序遍历可以确定A是这棵树的根节点,然后根据中序遍历...

Nan_Feng726的博客 2万+

构造二叉树

105. 从前序与中序遍历序列构造二叉树 给定一棵树的前序遍历preorder与中序遍历inorder。请构造二叉树并返回其根节点。 Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7] Output: [3,9,20,null,null,15,7] 示例 2: Input: preorder = [-1], inorder = [-1] Output: [-1] 来源:力扣(LeetCode) 链接:https://leet...

asa134124的博客 822
上一篇: 二分查找法
下一篇: Qt实现 计算器
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值