linux 递归创建线程,[linux]二叉树的建立及其递归遍历(C语言实现)

#二叉树的特点:

每一个节点最多有两棵子树,所以二叉树中不存在度大于2的节点,注意,是最多有两棵,没有也是可以的 左子树和右子树是有顺序的,次序不能颠倒,这点可以在哈夫曼编码中体现, 顺序不同编码方式不同

-即使树中某个节点中只有一个子树的花,也要区分它是左子树还是右子树

二叉树一般有五种形态 1.空二叉树 2.只有一个根节点 3.根结点只有左子树 4.根节点只有右子树

1fc643a3c7b72b8bd6e6f9afeb692ded.png

3da6f1440cb7a9ed46178a0dca7482af.png

#二叉树的性质 1:在二叉树的第i层上最多有2^i-1个节点 2:深度为K的二叉树之多有2^k-1个节点

这里的深度K意思就是有K层的二叉树 3:对于任何一棵二叉树T,如果其终端节点有No个,度为2的节点数有N2,则No=N2+1 4: 具有n个节点的完全二叉树的深度为[log2n]+1([x]表示不大于x的最大整数)

#1.二叉树的存储结构(二叉链表)

//二叉树的存储结构,一个数据域,2个指针域

typedef struct BiTNode

{

char data;

struct BiTNode *lchild,*rchild;

}BiTNode,*BiTree;

#2.首先要建立一个二叉树,建立二叉树必须要了解二叉树的遍历方法。,我在这里展示的是二叉树的递归建立方式

//我在这里实现的是,二叉树的前序遍历方式创建,如果要使用中序或者后序的方式建立二叉树,只需将生成结点和构造左右子树的顺序改变即可

void CreateBiTree(BiTree *T)

{

char ch;

scanf("%c",&ch);

if(ch=='#')

*T=NULL;

else

{

*T=(BiTree )malloc(sizeof(BiTNode));

if(!*T)

exit(-1);

(*T)->data=ch;

CreateBiTree(&(*T)->lchild);

CreateBiTree(&(*T)->rchild);

}

}

#3.二叉树的遍历方式(递归建立)

void PreOrderTraverse(BiTree T)//二叉树的先序遍历

{

if(T==NULL)

return ;

printf("%c ",T->data);

PreOrderTraverse(T->lchild);

PreOrderTraverse(T->rchild);

}

void InOrderTraverse(BiTree T)//二叉树的中序遍历

{

if(T==NULL)

return ;

InOrderTraverse(T->lchild);

printf("%c ",T->data);

InOrderTraverse(T->rchild);

}

void PostOrderTraverse(BiTree T)//后序遍历

{

if(T==NULL)

return;

PostOrderTraverse(T->lchild);

PostOrderTraverse(T->rchild);

printf("%c ",T->data);

}

#mac环境代码实现(完整代码)

#include

#include

typedef struct BiTNode

{

char data;

struct BiTNode *lchild,*rchild;

}BiTNode,*BiTree;

void PreOrderTraverse(BiTree T)//二叉树的先序遍历

{

if(T==NULL)

return ;

printf("%c ",T->data);

PreOrderTraverse(T->lchild);

PreOrderTraverse(T->rchild);

}

void InOrderTraverse(BiTree T)//二叉树的中序遍历

{

if(T==NULL)

return ;

InOrderTraverse(T->lchild);

printf("%C ",T->data);

InOrderTraverse(T->rchild);

}

void PostOrderTraverse(BiTree T)//后序遍历

{

if(T==NULL)

return;

PostOrderTraverse(T->lchild);

PostOrderTraverse(T->rchild);

printf("%c ",T->data);

}

void CreateBiTree(BiTree *T)

{

char ch;

scanf("%c",&ch);

if(ch=='#')

*T=NULL;

else

{

*T=(BiTree )malloc(sizeof(BiTNode));

if(!*T)

exit(-1);

(*T)->data=ch;

CreateBiTree(&(*T)->lchild);

CreateBiTree(&(*T)->rchild);

}

}

void pri(){

printf("\n");

}

int main()

{

BiTree T;

printf("输入树(#代表空节点 AB#C##D##):");

CreateBiTree(&T);

printf("前序遍历的结果是:");

PreOrderTraverse (T);

printf("\n中序遍历的结果是:");

InOrderTraverse(T);

printf("\n后序遍历的结果是:");

PostOrderTraverse(T);

pri();

return 0;

}

9985f93cffa5617eee18c49d36f1f1c7.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

delphi image 编辑器_照片拼图编辑器app下载-照片拼图编辑器下载 v1.0.0 安卓版

照片拼图编辑器是一个专业的照片编辑的app,app里面有很多的拼图工具,模板、水印、滤镜、贴图等等随便你用,可以将图片拼接成多种样式,满足你的各种需求。你想要什么样的效果都可以,赶紧来下载吧!应用介绍&a…

非核心版本的计算机上_哪个版本的Microsoft Office最好使用、来占用最少的资源...

使用过多个版本的Microsoft Office和WPS Office。让我推荐几个版本:Microsoft Office 2003和Microsoft Office 2007是两个资源最密集的版本(不考虑旧版本的Office),除非它们是特别旧的计算机,否则不建议安装。对于十年前的旧计算机&#xff0…

是vans_硬核复刻,就服VANS棋盘格

近几年复刻已成为 Sneaker 圈的新趋势,各大品牌纷纷将自家经典且具有年代感的鞋款复刻再造。而这其中最硬核的还要属 VANS ,在今年三月释出 VANS X FAST TIMES 鞋款,标志性的棋盘格元素加上醒目亮眼的红字 Logo ,为穿着者带来不一…

Java并发编程实战_阿里P9整理分享的亿级流量Java高并发与网络编程实战PDF

前言为了帮助初级开发者快速掌握高并发、网络编程、微服务、海量数据的处理这些实用技术,本文以“理论范例”的形式对各个知识点进行了详细的讲解,力争让读者在实践中快速掌握相关知识。为了让有java、数据库和web基础的学生,初、中级java开发…

英特尔 620 显卡 驱动 七代cpu_英特尔的智能“整体厨房”

其实,英特尔的战略非常容易理解。做最智能的“橱具”、最智能的“橱柜”、最智能的“橱电”。然后,顺理成章地构建起最智能“整体厨房”。再然后,用户可以在最优适配的软硬件环境中,专注于对数据的烹饪。当然,这是只是…

linux kvm安装win7,详解在 KVM 上安装 Win7 虚拟机

详解在 KVM 上安装 Win7 虚拟机发布时间:2017-04-04 21:09来源:互联网当前栏目:web技术类之前都是在用Linux 虚机,现在有需要用到Win7 虚机,才发现在 KVM 上安装 Win7 的过程远比想象中的复杂。本文就把其过程做个简单…

linux 如何获得后缀_Bugku:杂项 linux

打开这道题,标题是linux,让人心中一紧。提示为linux基础问题。下载压缩包解压之后是一个文件,没有后缀名,用010 Editor打开看看。全是空啊!!!!突然在中间找到了一点点文字&#xff0…

gradle引入依赖:_Gradle入门:依赖管理

gradle引入依赖:即使不是没有可能,创建没有任何外部依赖关系的现实应用程序也是一项挑战。 这就是为什么依赖性管理是每个软件项目中至关重要的部分的原因。 这篇博客文章描述了我们如何使用Gradle管理项目的依赖关系。 我们将学习配置已使用的存储库和所需的依赖项…

jquery怎么判断不同的字显示不同的颜色_这个双十一,摄影师的显示器该换了,优派VP2785-2K显示器评测_显示器...

2020-11-03 23:07:380点赞0收藏0评论想攒一台电竞主机、家用主机、酷炫主机无从下手?想省钱又怕性能不达标?值得买帮你打造定制化DIY装机工具,自助全网比价装机,提供最适合的搭配方案,解决各种攒机场景下难题。>快快…

c语言字体取模软件下载,非常好用的lcd汉字取模软件下载_非常好用的lcd汉字取模软件官方下载-太平洋下载中心...

修正了华文中宋汉字模生成过程中的切(底)边现象,配合lcmsim排版仿真软件一起使用,可以大大提高单片机编程的工作效率。几点说明:1。打开功能是专门用于对c语言文件自动提取显示所需要的汉字,进行点阵码数据转换的,在您…

CUBA平台:TypeScript SDK和REST API

在本文中,我们将讨论已存在很长时间但尚未广为人知的CUBA平台的功能- 前端SDK生成器 ,并了解它如何与CUBA的REST API插件一起使用 。 Java JavaScript –网络婚姻 仅八年前,我们Java开发人员在我们的Web应用程序中使用JavaScript作为“第二…

wifiphisher 依赖_铂瑞思:总是依赖别人的话,就永远也长不大

我们每个人都会或多或少的对他人产生依赖,依赖一词,可被定义为过度需要依靠他人的支持、指导、照顾和保护。但一部分人由于形成了与他人不同的思维与行为模式,导致了依赖型人格障碍的产生。依赖性人格障碍以过分依赖为特征,表现为…

网站开发用什么语言好_网站开发教程:企业如何用网站开启在线业务?

用网站来开启互联网在线业务是很好的方法,对于创业型企业来说,进行自己的企业网站开发制作能够加快实现品牌业务目标。下面这个教程将会教你如何开展在线业务、并利用网站来扩大业务!1.确定目标市场创业团队需要明确自己的目标市场&#xff0…

c语言字符指针初始化赋值,C语言_指针变量的赋值与运算,很详细详解

指针变量的赋值指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值。未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机。指针变量的赋值只能赋予地址, 决不能赋予任何其它数据&#xff0c…

ospf工作原理_OSPF动态路由配置经典案例

前导知识点:静态路由结合上一讲讲解的距离矢量路由协议,本讲我们讲解链路状态路由协议----OSPF,相比较于RIP,OSPF能够支持大型网络,下面列出RIP和OSPF的对比图,进一步说明了OSPF的强大。RIP最多支持15台路由…

gridview ashx实现数据更新_Python分析了香港26281套在售二手房数据,结果发现

作者:J哥背景香港的贫富差距问题一直十分尖锐,最突出的体现就是收入和楼价的巨大差异。早在60年代末香港房价就经历了暴涨,人们早已对不动产的金融属性了如指掌,全港的投资情绪一直都相当火热。即便香港当前失业率高企&#xff0c…

奇奇seo优化软件_西藏seo关键词优化软件

西藏seoxaa0c1关键词优化软件,网站在建立时搜索引擎是较为完善的基本上是不太需要长期进行优化的,但是近几年搜索引擎优化的频率开始增加,这让人有些好奇,搜索引擎优化的目的是什么?为什么受企业欢迎呢?网站…

c语言出现源文件未编译,dev运行C语言出问题

dev运行时出现源文件未编译的情况是什么原因,应该怎么样解决呢#include int main(){int day,month,year,sum,leap;printf("\n请输入年、月、日,格式为:年,月,日(2015,12,10)\n");scanf("%d,%d,%d",&year,&month,…

lucene自动补全_使用自动机的Lucene新的邻近查询

lucene自动补全最简单的Apache Lucene查询TermQuery匹配包含指定术语的任何文档,无论该术语出现在每个文档中的何处 。 使用BooleanQuery可以将多个TermQuery组合在一起,并完全控制哪些术语是可选的( SHOULD )和哪些是必需的&…

npm install 报错 汇总_2020年特岗教师招聘征集志愿人员资格复审、面试公告汇总...

原标题:2020年特岗教师招聘征集志愿人员资格复审、面试公告汇总昨天晚上安徽省2020年特岗教师招聘空缺计划征集志愿拟参加面试人员名单已经公布啦,接下来陆续就是资格复审和面试啦小可爱们一点要关注各地复审时间啊2020年特岗教师招聘征集志愿人员资格复…