二叉树遍历算法的应用

article/2025/10/8 17:38:05

目录

一、二叉树遍历算法的应用——二叉树的创建

二、二叉树遍历算法的应用——复制二叉树

三、二叉树遍历算法的应用——计算二叉树的深度

四、二叉树遍历算法的应用——计算二叉树节点总数

五、二叉树遍历算法的应用——计算二叉树叶子节点数


一、二叉树遍历算法的应用——二叉树的创建

1、按先序遍历序列建立二叉树的二叉链表

例如:已知先序序列为:ABCDEGF,按照二叉树先序方式建立可能会建立出两种不同的二叉树,如下图所示:

因此为了避免这种情况,我们可以补充一些空结点,补充空结点过后这两棵树接完全不一样了,因为补充的空结点的位置不一样。可用#号表示空结点。

2、对下图所示二叉树按下列顺序读入字符:ABC##DE#G##F###

            

算法描述:

Status CreateBiTree(BiTree &T){scanf(&ch); //cin>>ch;if (ch== "#")T=NULL;else {if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) exit(OVERFLOW); //T=new BiTNode;T->data=ch; // 生成根结点CreateBiTree(T->lchild);    //构造左子树
CreateBiTree(T->rchild);    //构造右子树
}
return OK;}//CreateBiTree

二、二叉树遍历算法的应用——复制二叉树

1、算法思路

如果是空树,递归结束;

否则,申请新结点空间,复制根结点

➢递归复制左子树

➢递归复制右子树

2、算法描述:

int Copy(BiTree T, BiTree &NewT){
if(T==NULL) {                //如果是空树返回0
NewT=NULL; return 0;
}
else {NewT=new BiTNode;NewT->data=T->data;Copy(T->lChild, NewT->lchild);Copy(T->rChild, NewT->rchild);}}

三、二叉树遍历算法的应用——计算二叉树的深度

1、算法思路

如果是空树,则深度为0;  否则,递归计算左子树的深度记为m,递归计算右子树的深度记为n,二叉树的深度则为m与n的较大者加1。

2、算法描述

int Depth( BiTree T){if(T==NULL)   return 0; //如果是空树返回0
else {m=Depth(T->lChild);n=Depth(T->rChild);if(m>n) 
return (m+1);else return(n+1);}
}

四、二叉树遍历算法的应用——计算二叉树节点总数

1、算法思路

如果是空树,则结点个数为0;

否则,结点个数为左子树的结点个数+右子树的结点个数再+1。

2、算法描述

int NodeCount(BiTree T){if(T == NULL )return 0;elsereturn NodeCount(T-> lchild)+NodeCount(T->rchild)+ 1;}

五、二叉树遍历算法的应用——计算二叉树叶子节点数

1、算法思路

如果是空树,则叶子结点个数为0;

否则,为左子树的叶子结点个数+右子树的叶子结点个数。

2、算法描述

int LeadCount(BiTree T){if(T==NULL)           //如果是空树返回0return 0;if (T->Ichild==NULL && T->rchild == NULL)return 1; //如果是叶子结点返回1elsereturn LeafCount(T->Ichild)+LeafCount(T->rchild);}


http://chatgpt.dhexx.cn/article/rBcPD72D.shtml

相关文章

一文弄懂二叉树的三种遍历方式

关注公众号【高性能架构探索】,后台回复【pdf】,免费获取计算机必备经典书籍 俗话说:学如逆水行舟,不进则退;心似平原走马,易放难收。这句话对程序员而言,体会更深。这行已经越来越卷了,时刻准备着,&#x…

二叉树遍历算法

目录 先序遍历 中序遍历 后序遍历 层序遍历 938. 二叉搜索树的范围和 110. 平衡二叉树 114. 二叉树展开为链表 117. 填充每个节点的下一个右侧节点指针 II 116. 填充每个节点的下一个右侧节点指针 1,三种遍历都是先把二叉树的最左结点循环入栈(DFS迭代)&am…

二叉树的四种遍历算法(结构体数组)

一、二叉树的定义 以字符串的形式定义一棵二叉树的先序序列,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。 例:ABDG##HI####CE#J##F## 对应的二叉树: 思路讲解: 想要遍历二叉树&am…

二叉树的四种遍历方式

概要 树本身是一种简单化的图 ; DFS对应前中后序遍历,BFS对应层序遍历 二叉树结构 struct treenode {int val;treenode *left;treenode *right;treenode() : val(0), left(nullptr), right(nullptr) {}treenode(int x) : val(x), left(nullptr), right(n…

针对Linux学习,值得阅读的五本书籍,不看可能错失机会

今天为了总结一些可以帮助各位在学习过程中提供帮助的一些书籍。 一.鸟叔的私房菜: 本书是知名度颇高的Linux入门书《鸟哥的Linux私房菜基础学习篇》的新版,而详细地介绍了Linux操作系统。全书分为五部分;第一部分部分着重说明计算机的基础知识、Linux的学习方法&a…

从零开始学习Linux(一)关闭虚拟机系统

关闭系统,需要输入如下命令 poweroff然而,你只能得到如下反馈 -bash: poweroff:command not found此项错误是因为poweroff命令是一个系统管理命令。执行此项命令需要高级使用者特权。 因此,为了关闭系统,我们首先需要切换到root…

个人随笔/小白应该如何学习Linux,我的一些心得分享.

大家好,今天给大家分享一下0基础的人如何入门Linux,此文来源:我在上班的路上看到一篇文章,也是写的0基础的人如何学习Linux的文章。当时我在想,我写博文一年多,都是相关Linux及Python等技术的文章&#xff…

Linux学习路线

 关于 Linux Linux 因其开源,免费,可裁剪,被应用到很多领域,尤其是嵌入式设备上。 Android 系统内核也是基于 Linux 的。 另外还有各种服务器和工作站也是用的 Linux。 什么是嵌入式设备?…

为什么要学习 Linux ????

目前企业中大量的使用Linux作为服务器,在以后你们就业后,会发现web服务器Tomcat ,jobss这一类都是搭建在linux上面的,后面我们需要学习的数据库mysql , oracle ,db2, 或者greenplum这一类的,在企…

Linux 学习路线图

1.应用场景 更加高效地学习并达到运用Linux. 2.学习/操作 linux运维学习需要分为四个阶段:初级入门、中级进阶、高级提升、资深方向细化。 第一阶段:初级入门 初级阶段需要把linux学习路线搞清楚,任何学习都是循序渐进的,所以学…

从零入门机器学习之Linux系统详解

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

为什么要学习Linux?

对于一些偶然接触到Linux的人来说,好奇是对于这个陌生名词的的第一印象。也许这个名字经常出现在你所使用的教科书上,或者是一些技术性的文章上,你却不知其意,此时这个名字再次出现,你就更是好奇了,Linux到…

Linux学习总结

课程:Linux操作系统与应用 参考书:Linux从入门到精通、unix环境高级编程 学习linux之前必须要做好心理准备: 第一,要明白学好linux不是一件一蹴而就的事,一定要能坚持使用它,特别是在使用初期&#xff0c…

你知道如何学习Linux吗?

说起Linux,业内人士或者经常玩电脑,对计算机比较精通的应该是比较熟悉的,Linux是一个开源的操作系统,由于其安全性高,完全免费,高效性,稳定等优点,越来越受大众的欢迎,就…

学习linux的感受

学习前要 1.安装虚拟机或者自己买个云服务器 下载centOs然后将镜像装入系统 2.装入之后在自己的电脑下载Xshell和Xbox 3在自己windows系统下运行cmd拼一下自己的虚拟机或服务器测试两个机子网络是否相通,如果相通即可用Xshell进行远程登陆 成果: 今天学了vim与vi&…

初学者如何系统性地学习Linux?

作为一个大一的同学,可以采取下面的步骤进行系统的学习Linux。 1、选择一个发行版:对于初学者,推荐使用Ubuntu或者Linux Mint。Ubuntu适合新手,使用广泛,社区活跃,遇到问题容易找到解决方案。虽然你觉得Ub…

如何学习Linux

热热热 一、Linux大致要学习那些内容 1、Linux下的基本操作命令 2、Linux的各种配置 环境变量、网络的配置、服务的配置----常规而重要 3、Linux下搭建各种开发环境 例如: Javaee、大数据、Python等 4、能够写一些基本的shell脚本,对Linux系统进…

QTP基本使用1

目录 一、功能自动化 1、测试过程 2、录制类型 二、QTP基本使用1 1、【录制】 2、【运行】 3、【例 -- 录制编写记事本】 4、【设置】 三、上午程序脚本 四、test -- project 的比较 五、QTP基本使用2 1、导出test文件 2、导入test文件 3、查看帮助文档 4、修改…

QTP 脚本语言编写入门到精通(一)

飞机订票登陆系统flight 一、编写用户登录测试用例。 二、直接编写脚本 ****************** SystemUtil.Run PathFinder.Locate("..\samples\flight\app\flight4a.exe"),"",PathFinder.Locate("..\samples\flight\app"),"open" Syst…

QTP工具简单操作使用说明

简介 QTP是QuickTest Professional 的简称,是一种自动化测试工具。使用QTP的目的是用它来执行重复的手动测试,主要用于回归测试和测试同一软件的新版本(版本迭代)。 启动QuickTest 第一次启动QuickTest时,打开“加载…