C语言线索二叉树的前中后如何创建和遍历
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇"C语言线索二叉树的前中后如何创建和遍历"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看
千家信息网最后更新 2025年11月10日C语言线索二叉树的前中后如何创建和遍历
这篇"C语言线索二叉树的前中后如何创建和遍历"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C语言线索二叉树的前中后如何创建和遍历"文章吧。
1.结构
#include#include #define false 0#define true 1using namespace std;typedef struct BTnode{ int data; struct BTnode *lchild,*rchild; int ltag,rtag; }*BTree,BTnode;
1.1初始化tag
#include#include #define false 0#define true 1using namespace std;typedef struct BTnode{ int data; struct BTnode *lchild,*rchild; int ltag,rtag; }*BTree,BTnode;
2.基本操作
2.1 先序创建二叉树
int j=0; //创建二叉树的全局变量 //先序创建二叉树 int CreateBTree(BTree &T){ int str[]={1,2,3,NULL,4,NULL,NULL,NULL,5,6,NULL,7,NULL,NULL,8,NULL,NULL}; if(str[j]=='#') return false; if(str[j]==NULL){ T=NULL; j++; }else{ T=(BTnode *)malloc(sizeof(BTnode)); T->data=str[j]; j++; CreateBTree(T->lchild); CreateBTree(T->rchild); } }输出函数:
inline bool visit(int e){ //此处使用内敛函数,提高运行效率 printf("%d",e); return true; }2.2.先序线索化
//先序线索化. void prehread(BTree &root){ if(root!=NULL){ if(root->lchild==NULL){ root->ltag=1; root->lchild=pre; }else{ root->ltag=0; } if(pre){ if(pre->rchild==NULL){ pre->rtag=1; pre->rchild=root; }else{ pre->rtag=0; } } pre=root; if(root->ltag==0){ prehread(root->lchild); } if(root->rtag==0){ prehread(root->rchild); } }}2.2.1.先序遍历
//寻找先序后继 BTree preNext(BTree T){ if(T->rtag==1){ return T->rchild; }else{ if(T->ltag==0){ return T->lchild; }else{ return T->rchild; } } }//先序线索二叉树的遍历void prebianli(BTree T){ BTree p; p=T; while(p){ visit(p->data); p=preNext(p); }}2.3.中序线索化
//中序线索化BTree pre=NULL ; //中序线索化的全局变量 void Inthread(BTree &root){ if(root!=NULL){ Inthread(root->lchild); if(root->lchild==NULL){ root->ltag=1; root->lchild=pre; }else{ root->ltag=0; } if(pre){ if(pre->rchild==NULL){ pre->rtag=1; pre->rchild=root; }else{ pre->rtag=0; } } pre=root; Inthread(root->rchild); }}2.3.1 中序遍历
//求中序首结点 BTree InFirst(BTree T){ BTree p=T; if(p==NULL) return NULL; while(p->ltag==0){ p=p->lchild; } return p;} //求中序后继 BTree InNext(BTree T) { BTree next=NULL; if(T->rtag==1){ next=T->rchild; }else { T = T->rchild; while (T->ltag==0 ) { T = T->lchild; } next=T; } return next; } //中序线索二叉树的遍历void Inbianli(BTree T){ BTree p; p=InFirst(T); while(p){ visit(p->data); p=InNext(p); }}2.4.后序线索化
//后续线索化 void Postthread(BTree &root){ BTree pre=NULL; if(root){ Postthread(root->lchild); Postthread(root->rchild); if(root->lchild==NULL){ root->ltag=1; root->lchild=pre; } if(pre&&pre->rchild==NULL){ pre->rtag=1; pre->rchild=root; } pre=root; }}2.4.1 后序遍历
//求后序前驱 BTree postnext(BTree T){ if(T->ltag==0){ if(T->rtag==0){ return T->rchild; }else{ return T->lchild; } }else { return T->lchild; }}//后序遍历void postbianli(BTree T){ BTree p; p=T; while(p){ p=postnext(p); visit(p->data); }}以上就是关于"C语言线索二叉树的前中后如何创建和遍历"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
线索
内容
语言
全局
函数
变量
文章
知识
篇文章
后继
内敛
价值
前驱
基本操作
大部分
就是
效率
更多
步骤
知识点
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
天翼云服务器磁盘分区
北京京城地铁 网络安全
重庆戴尔服务器续保更换
惠州市友聚互联网科技有限公司
腾讯网络安全团队比赛
服务器级别ip安全策略
幼儿园网络安全培训小结
绵阳长虹软件开发一年收入
济南专业软件开发流程
戴尔应用服务器设置ip
什么cpu最适合mc服务器
战地3加入服务器闪退
ssh整合如何查询数据库
努比亚手机服务器连接错误代码
软件开发分析
1u机架式服务器机箱
mvc框架数据库增改删
苹果换手机内存怎么读取数据库
北京易游博通网络技术怎么样
网络安全与执法视力要求
深圳恒通网络技术有限公司
中国服务器租用哪个平台好
sql job同步数据库
国外服务器服务商
我的世界添加服务器在哪填
显微测量 软件开发
JS函数调用数据库判断
狼友服务器
比access简单的数据库
联想sr650服务器大小