C语言线索二叉树的前中后如何创建和遍历
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇"C语言线索二叉树的前中后如何创建和遍历"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看
千家信息网最后更新 2025年02月02日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安全错误
数据库的锁怎样保障安全
数据库系统基础教程原书第3版
数据库知识与技术就业前景
全球网络安全十大案例
普陀区生态网络技术销售厂
计算机网络技术项目简介
长沙斗牛软件开发
娄底网络安全宣传周主题党日
poi数据库 下载
免费下载网络安全psd素材
物理机服务器安全吗
赞美网络技术的句子
麻将游戏软件开发多少钱
长沙宽带服务器名称
php服务器编程
华科网络安全复试
网络安全法的几个重点
基础设施与网络安全招聘
wifi服务器哪个最好
软件开发公司占股份比例
网络技术在职研究生
温州嵌入式软件开发费用
传感器网络技术在农业上的应用
计算机网络安全受损的危害
数据库哪种
云数据库扩容
宁波app软件开发聚顶科技
基础设施与网络安全招聘
编写数据库系统需求分析说明书
查出数据库的字段去除换行符
c 软件开发月薪多少