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…

java gradle入门_Gradle入门:我们的第一个Java项目

java gradle入门这篇博客文章描述了如何使用Gradle编译和打包一个简单的Java项目。 我们的Java项目只有一个要求: 我们的构建脚本必须创建一个可执行的jar文件。 换句话说,我们必须能够使用以下命令运行程序: java -jar jarfile.jar让我们…

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

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

linux条件测试的三种,shell编程之条件测试 | 旺旺知识库

一、条件测试语法:test 测试内容[ 测试内容 ] ##注意中括号与测试内容间有空格[[ 测试内容 ]](( 测试内容 )) ##只能用于测试数值大小,后面详解前三种测试语法基本等同。二、数值测试:2.1 常见的数值测试:int1 -eq int2 如…

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

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

使用SDKMAN管理多个Java SDK! 轻松

SDKMAN! 是用于管理多个软件开发套件的并行版本的便捷工具。 该工具对Java开发人员特别有用,因为它支持JVM的SDK,例如Java,Groovy,Scala,Kotlin和Ceylon。 还支持Gradle,Maven,Sprin…

linux wordpress伪静态,wordpress程序在win和Linux系统下的伪静态设置 - 张力博客

这是一篇很早就应该写的文章,而在昨天就有朋友问我,为什么不写一下关于wordpress的伪静态设置呢?今天这篇文章我就来跟大家说一下,关于wordpress程序在win和Linux系统下的伪静态设置方法。第一种:win系统下的wordpress…

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

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

r语言 林元震_科学网—R语言简介 - 林元震的博文

R既是软件,也是语言,在GNU协议General Public Licence下免费发行,是1995年由新西兰奥克兰大学统计系的Ross Ihaka和Robert Gentleman基于S语言基础上共同开发的一种统计软件。现在由R开发核心小组(R Development Core Team)负责维护与更新&am…

英特尔 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语言文件自动提取显示所需要的汉字,进行点阵码数据转换的,在您…

thymeleaf双重循环_spring boot: 用thymeleaf嵌套循环展示多层数据(spring boot 2.3.2)

一,什么情况下会用到嵌套循环?当我们展示多个分类时,每个分类下又展示出推荐的前几个商品,这时我们需要用到嵌套循环看一个例子:说明:作者:刘宏缔 邮箱: 371125307qq.com二,演示项目的相关信息1…

CUBA平台:TypeScript SDK和REST API

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

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

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

米兔机器人自主编程_978个零件+自主编程,米兔机器人价格仅为友商八分之一...

作为一个“大孩子”,我也喜欢拼积木,看重了一款乐高的可变性积木竟然售价4000多,太贵了,实在买不起。然后就搜索到了小米的这款米兔儿童机器人,性能上能达到乐高95%以上,价格却只有八分之一,果断…

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

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