实验三 二叉树的基本运算

合集下载

二叉树基本运算

二叉树基本运算

二叉树基本运算二叉树基本运算二叉树是计算机科学中最基础的数据结构之一,它由节点和指向其左右子节点的指针组成。

在实际应用中,二叉树作为一种重要的数据结构,可以用于解决各种问题。

在进行二叉树的操作时,常见的有插入节点、删除节点、查找节点以及遍历。

这些操作都是二叉树的基本运算。

第一类运算是插入节点的操作。

插入节点到二叉树中,需要根据一定的规则将新节点放置在合适的位置。

例如,若新节点的值比当前节点的值小,则将其放在当前节点的左侧;若新节点的值大,则将其放在当前节点的右侧。

这样,可以保持二叉树的有序性。

插入节点的运算可以通过递归或迭代的方式实现。

无论是哪种方式,重要的是要保证插入后的二叉树仍然是一棵二叉树。

第二类运算是删除节点的操作。

删除节点的操作相对比较复杂,需要考虑被删除节点的子节点情况。

若被删除节点没有子节点,则直接删除即可;若被删除节点只有一个子节点,则将其子节点连接到被删除节点的父节点上即可;若被删除节点有两个子节点,则需找到其右子树的最小节点,用该最小节点替代被删除节点,并删除该最小节点。

删除节点的运算同样可以通过递归或迭代的方式实现。

第三类运算是查找节点的操作。

查找节点的操作可以用于判断二叉树中是否存在某个特定值的节点。

查找节点的运算可以通过递归或迭代的方式实现。

在递归实现中,从根节点开始,若当前节点的值等于目标值,则返回该节点,否则分别在左子节点和右子节点中进行查找。

在迭代实现中,可以借助栈或队列等数据结构来辅助查找。

最后一类运算是遍历二叉树的操作。

二叉树的遍历有三种方式:前序遍历、中序遍历和后序遍历。

前序遍历先访问根节点,然后依次遍历左子树和右子树;中序遍历先遍历左子树,然后访问根节点,最后遍历右子树;后序遍历先遍历左子树,然后遍历右子树,最后访问根节点。

这三种遍历方式均可以通过递归或迭代的方式实现。

在二叉树的基本运算中,不同的操作可以根据具体的需求进行选择。

其中,插入节点、删除节点和查找节点操作都涉及到对二叉树结构的修改,需要小心处理,以保证操作的正确性。

实验三--二叉树的基本运算

实验三--二叉树的基本运算

实验三二叉树的基本运算一、实验目的1、使学生熟练掌握二叉树的逻辑结构和存储结构。

2、熟练掌握二叉树的各种遍历算法。

二、实验内容1、问题描述建立一棵二叉树,试编程实现二叉树的如下基本操作:(1). 按先序序列构造一棵二叉链表表示的二叉树T;(2). 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出结点的遍历序列;(3). 求二叉树的深度/结点数目/叶结点数目;(选做)(4). 将二叉树每个结点的左右子树交换位置。

(选做)2、基本要求从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立)。

3、测试数据如输入:abc00de0g00f000(其中ф表示空格字符)则输出结果为:先序:a->b->c->d->e->g->f中序:a->b->c->d->e->g->f后序:a->b->c->d->e->g->f三、程序代码#include<malloc.h>#include<iostream.h>#define OK 1#define ERROR -1typedef char TElemType;int i;typedef struct BiTNode{TElemType data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;int CreateBiTree(BiTree&T) //创建二叉树{char a;cin>>a;if(a=='0') T=NULL;else{if(!(T=(BiTNode*)malloc(sizeof(BiTNode)))) {return ERROR;}T->data=a;CreateBiTree(T->lchild);CreateBiTree(T->rchild);}return OK;}int PreOrderTraverse(BiTree&T) //先序遍历二叉树{if(T){//cout<<"此为先序遍历"<<endl;cout<<T->data<<"->";if(PreOrderTraverse(T->lchild))if(PreOrderTraverse(T->rchild))return OK;return ERROR;}else return OK;}int InOrderTraverse(BiTree&T) //中序遍历二叉树{if(T){//cout<<"此为中序遍历"<<endl;if(InOrderTraverse(T->lchild)){cout<<T->data<<"->";if(InOrderTraverse(T->rchild))return OK;}return ERROR;}else return OK;}int PostOrderTraverse(BiTree&T) //后序遍历二叉树{if(T){//cout<<"此为后序遍历"<<endl;if (PostOrderTraverse(T->lchild))if(PostOrderTraverse(T->rchild)){cout<<T->data<<"->";i++;return (OK);}return (ERROR);}elsereturn (OK);}int CountDepth(BiTree&T) //计算二叉树的深度{if(T==NULL){return 0;}else{int depl=CountDepth(T->lchild);int depr=CountDepth(T->lchild);if(depl>depr){return depl+1;}else{return depr+1;}}}void main() //主函数{BiTree T;cout<<"请输入二叉树节点的值以创建树"<<endl;CreateBiTree(T);cout<<"此为先序遍历";PreOrderTraverse(T);cout<<"end"<<endl;cout<<"此为中序遍历";InOrderTraverse(T);cout<<"end"<<endl;cout<<"此为后序遍历";PostOrderTraverse(T);cout<<"end"<<endl<<"此树节点数是"<<i<<endl<<"此树深度是"<<CountDepth(T)<<endl;}四、调试结果及运行界面:五、实验心得通过这次程序上机实验让我认识到了以前还不太了解的二叉树的性质和作用,这次实验的的确确的加深了我对它的理解。

实现二叉树的各种基本运算的算法

实现二叉树的各种基本运算的算法

实现二叉树的各种基本运算的算法1.二叉树的定义及概述二叉树是一种重要的数据结构,它是由节点组成的序列,每个节点最多有两个子节点。

二叉树的根节点是唯一的,且每个节点都有一个“父节点”,除了根节点外,每个子节点称作“左孩子”和“右孩子”。

二叉树的组成部分是节点,每个节点包括一个数据元素和左右孩子指针。

通过这些指针构成的树形结构,可以便捷地进行数据存储和操作。

本文将介绍二叉树的各种基本运算及实现方法。

2.二叉树的遍历二叉树的遍历分为三种:前序遍历、中序遍历和后序遍历。

前序遍历:按照“根节点-左孩子-右孩子”的顺序遍历二叉树。

中序遍历:按照“左孩子-根节点-右孩子”的顺序遍历二叉树。

后序遍历:按照“左孩子-右孩子-根节点”的顺序遍历二叉树。

3.二叉树的建立二叉树的建立有三种方法:链式存储法、顺序存储法和扩展二叉树。

链式存储法:链式存储法是用链表来表示二叉树的方法,每个节点包括数据域和左右孩子指针域。

链式存储法建立二叉树比较容易,操作起来也比较方便。

顺序存储法:顺序存储法是用数组来表示二叉树的方法,便于存取、操作和查找。

但是顺序存储法的空间利用率不高,只有满二叉树才能利用完全。

扩展二叉树:是指二叉树中所有的空节点都必须存储起来,以构成一颗可以存储不满的二叉树。

由于扩展二叉树浪费了大量的空间,因此很少使用。

4.二叉树的查找二叉树的查找分为两种:层序遍历和二叉排序树的查找。

层序遍历:是一种广度优先搜索的方式来遍历二叉树。

层序遍历可以找到二叉树中从根节点到任意节点的路径,具有较高的效率。

层序遍历可以使用队列来实现。

二叉排序树的查找:是指在一颗二叉排序树中查找某个元素的算法。

二叉排序树(BST)是一颗二叉树,其中每个节点的值都比它的左子节点大,比它的右子节点小。

通过对BST的查找操作,可以将查找的效率高效地进行。

5.二叉树的删除在二叉树中删除节点有两种情况:删除叶子节点和删除非叶子节点。

下面给出二叉树的删除基本操作。

二叉树的各种基本运算的实现实验报告

二叉树的各种基本运算的实现实验报告

二叉树的各种基本运算的实现实验报告
一、实验目的
实验目的为了深入学习二叉树的各种基本运算,通过操作实现二叉树的建立、存储、查找、删除、遍历等各种基本运算操作。

二、实验内容
1、构造一个二叉树。

我们首先用一定的节点来构建一棵二叉树,包括节点的左子节点和右子节点。

2、实现查找二叉树中的节点。

在查找二叉树中的节点时,我们根据二叉树的特点,从根节点开始查找,根据要查找的节点的值与根节点的值的大小的关系,来决定接下来查找的方向,直到找到要查找的节点为止。

3、实现删除二叉树中的节点。

在删除二叉树节点时,我们要做的是找到要删除节点的父节点,然后让父节点的链接指向要删除节点的子节点,有可能要删除节点有一个子节点,有可能有两个极点,有可能没有子节点,我们要根据每种情况进行处理,来保持二叉树的结构不变。

4、对二叉树进行遍历操作。

二叉树的遍历有多种方法,本实验使用的是先序遍历。

首先从根节点出发,根据先序遍历的顺序,先访问左子树,然后再访问右子树,最后访问根节点。

三、实验步骤
1、构建二叉树:
我们用一个数组代表要构建的二叉树,第一项为根节点,第二项和第三项是根节点的子节点。

数据结构与算法实验——二叉树基本操作

数据结构与算法实验——二叉树基本操作

二叉树基本操作实验报告实验名称二叉树基本操作实验目的1.熟悉二叉树结点的结构和二叉树的基本操作;2.掌握二叉树每种操作的具体实现;3.学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法;4.在二叉树基本操作的基础上掌握对二叉树的一些其它操作的具体实现方法;5.掌握构造哈夫曼树以及哈夫曼编码的方法。

实验内容编制一个演示二叉树创建、遍历、计算等操作的程序。

问题描述用数据结构相关知识,实现二叉树的定义和操作。

该程序包括二叉树结构类型以及对二叉树操作的具体的函数定义(包括:初始化二叉树、清空二叉树、检查二叉树是否为空、遍历二叉树(先序、后序、中序、层次)、求二叉树的深度、求二叉树所有节点数)。

问题分析该实验是基于C语言和数据结构知识基础的对二叉树的基本操作的检验,无需设计复杂的算法,程序语句也相对简单。

因此,我直接按要求定义了对二叉树操作的具体函数,并于主函数中实现对应的功能调用,其中,功能选择靠switch语句实现。

实验步骤1.需求分析本演示程序用VC++编写,完成二叉树的生成、遍历、计算等基本操作。

①输入的形式和输入值的范围:以字符(其中‘#’表示虚节点)的形式输入,以创建二叉树;在输入二叉树节点前,必须先确定该序列能正确创建二叉树。

②输出的形式:在所有三种操作中都显示操作是否正确以及操作后二叉树的内容。

③程序所能达到的功能:完成二叉树的生成、遍历(包括先序、后序、中序、层次四种方式)、计算等基本操作。

④测试数据:创建操作中依次输入a,b,d,#,g,#,#,#,c,e,#,#,f,#,#生成一个二叉树。

2.概要设计1)为了实现上述程序功能,需要定义二叉树的抽象数据类型:ADT BitTree {数据对象:由一个根节点和两个互不相交的左右子树构成数据关系:结点具有相同的数据类型及层次结构基本操作:Void BinTreeInit(BitTree *T)初始条件:无操作结果:初始化一棵二叉树Void BinTreeCreat(BitTree *T)初始条件:二叉树T已存在操作结果:按先序次序创建一棵二叉树2)本程序包含7个函数:①主函数main() ②初始化二叉树函数BinTreeInit() ③建立一棵二叉树函数BinTreeCreat() ④先序遍历函数PreOrderTraverse() ⑤中序遍历函数InOrderTraverse()⑥后序遍历函数PostOrderTraverse()⑦层次遍历函数LevelOrderTraverse()⑧求二叉树深度函数Countlevel()⑨检验空树函数BinTreeEmpty()⑩求节点数函数 Countnode()函数说明#include<stdio.h>#include<stdlib.h>typedef char Datatype;typedef struct NodeType{Datatype data;struct NodeType *lchild;struct NodeType *rchild;}BiTNode;typedef BiTNode * BinTree;//初始化二叉树。

二叉树各种基本运算与遍历算法

二叉树各种基本运算与遍历算法
return(num1+num2+1);
}
}
int LeafNodes(BTNode*b)
{
int num1,num2;
if(b==NULL)
return 0;
else if(b->lchild==NULL&&b->rchild==NULL)
return 1;
else
{
num1=LeafNodes(b->lchild);
{
return p->lchild;
}
BTNode *RchildNode(BTNode *p)
{
return p->rchild;
}
int BTNodeDepth(BTNode *b)
{
int lchilddep,rchilddep;
if(b==NULL)
return(0);
else
{
lchilddep=BT}
int Nodes(BTNode*b)
{
int num1,num2;
if(b==NULL)
return 0;
else if(b->lchild==NULL&&b->rchild==NULL)
return 1;
else
{
num1=Nodes(b->lchild);
num2=Nodes(b->rchild);
St[top].pt=p->rchild;
St[top].tag=1;
top++;
St[top].pt=p->lchild;
St[top].tag=1;

实验三 二叉树基本运算以及遍历

实验三 二叉树基本运算以及遍历

实验三二叉树基本运算以及遍历一实验目的:了解树的逻辑和存储特点,掌握二叉树的建立,以及前中后序遍历的理论思想和运算方法。

二实验内容:建立一棵二叉树,添加树中结点的元素,对该二叉树进行前、中、后序遍历,并打印遍历结果三实验原理:二叉树(Binary Tree)是个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。

当集合为空时,称该二叉树为空二叉树。

在二叉树中,一个元素也称作一个结点。

二叉树是有序的,即若将其左、右子树颠倒,就成为另一棵不同的二叉树。

即使树中结点只有一棵子树,也要区分它是左子树还是右子树。

即用链来指示着元素的与rchild分别存放指向左孩子和右孩子的指针,当左孩子或右孩子不存在时,相应指针域值为空。

二叉树的建立:1 建立根结点。

2 若左子树不空则建左子树。

3 若右子树不空则建右子树。

二叉树的前序遍历1 访问根结点;2 先序遍历根结点的左子树;3 先序遍历根结点的右子树。

二叉树的中序遍历1 中序遍历根结点的左子树;2 访问根结点;3 中序遍历根结点的右子树。

二叉树的后序遍历1后序遍历根结点的左子树;2后序遍历根结点的右子树。

3访问根结点;四实验步骤1 进入Turbo C2.0,新建一个文件。

2 输入程序,程序要求使用子函数进行组织。

3 将源程序保存到指定文件夹“D:\学生姓名”。

4 按F9调试,纠正语法错误。

5按Ctrl+F9运行,调试逻辑错误。

6 按Alt+F5查看结果。

五、实验中应注意的问题与思考题:1 如果需要对树中的数据进行查询修改,应该如何实现?先找到需要修改的数据的位置,再让对其赋值。

2对各个功能模块采用独立编制子函数,增强程序的可执行性、可移植性和可读性。

增加情报信息量,对实际应用中可能发生的情况考虑周全,对非法情形要提出适当的处理方案。

3 深入了解树的逻辑结构,重点掌握递归方法的原理和实现,在确定递归终点条件的时候应特别小心,避免产生死循环。

数据结构实验三——二叉树基本操作及运算实验报告

数据结构实验三——二叉树基本操作及运算实验报告

《数据结构与数据库》实验报告实验题目二叉树的基本操作及运算一、需要分析问题描述:实现二叉树(包括二叉排序树)的建立,并实现先序、中序、后序和按层次遍历,计算叶子结点数、树的深度、树的宽度,求树的非空子孙结点个数、度为2的结点数目、度为2的结点数目,以及二叉树常用运算。

问题分析:二叉树树型结构是一类重要的非线性数据结构,对它的熟练掌握是学习数据结构的基本要求。

由于二叉树的定义本身就是一种递归定义,所以二叉树的一些基本操作也可采用递归调用的方法。

处理本问题,我觉得应该:1、建立二叉树;2、通过递归方法来遍历(先序、中序和后序)二叉树;3、通过队列应用来实现对二叉树的层次遍历;4、借用递归方法对二叉树进行一些基本操作,如:求叶子数、树的深度宽度等;5、运用广义表对二叉树进行广义表形式的打印。

算法规定:输入形式:为了方便操作,规定二叉树的元素类型都为字符型,允许各种字符类型的输入,没有元素的结点以空格输入表示,并且本实验是以先序顺序输入的。

输出形式:通过先序、中序和后序遍历的方法对树的各字符型元素进行遍历打印,再以广义表形式进行打印。

对二叉树的一些运算结果以整型输出。

程序功能:实现对二叉树的先序、中序和后序遍历,层次遍历。

计算叶子结点数、树的深度、树的宽度,求树的非空子孙结点个数、度为2的结点数目、度为2的结点数目。

对二叉树的某个元素进行查找,对二叉树的某个结点进行删除。

测试数据:输入一:ABC□□DE□G□□F□□□(以□表示空格),查找5,删除E预测结果:先序遍历ABCDEGF中序遍历CBEGDFA后序遍历CGEFDBA层次遍历ABCDEFG广义表打印A(B(C,D(E(,G),F)))叶子数3 深度5 宽度2 非空子孙数6 度为2的数目2 度为1的数目2查找5,成功,查找的元素为E删除E后,以广义表形式打印A(B(C,D(,F)))输入二:ABD□□EH□□□CF□G□□□(以□表示空格),查找10,删除B预测结果:先序遍历ABDEHCFG中序遍历DBHEAGFC后序遍历DHEBGFCA层次遍历ABCDEFHG广义表打印A(B(D,E(H)),C(F(,G)))叶子数3 深度4 宽度3 非空子孙数7 度为2的数目2 度为1的数目3查找10,失败。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三二叉树的基本运算一、实验目的1、使学生熟练掌握二叉树的逻辑结构和存储结构。

2、熟练掌握二叉树的各种遍历算法。

二、实验内容[问题描述]建立一棵二叉树,试编程实现二叉树的如下基本操作:1. 按先序序列构造一棵二叉链表表示的二叉树T;2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出结点的遍历序列;3. 求二叉树的深度/结点数目/叶结点数目;(选做)4. 将二叉树每个结点的左右子树交换位置。

(选做)[基本要求]从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),[测试数据]如输入:ABCффDEфGффFффф(其中ф表示空格字符)则输出结果为先序:ABCDEGF中序:CBEGDFA后序:CGEFDBA层序:ABCDEFG[选作内容]采用非递归算法实现二叉树遍历。

三、算法设计1、主要思想:二叉树是n(n>=0)个元素的有限集合,此集合或者为空集,或者由一个根结点及两棵互不相交的左右子树组成,并且左右子树都是二叉树。

在本实验中根据要求操作先序遍历二叉树:思想:利用栈来实现;根结点进栈,之后栈非空,弹出,接着根节点的右结点进栈,之后,左节点进栈;接着,弹出栈顶元素(输出),此结点的右结点进栈,之后左节点进栈,弹出栈顶元素(输出)...一直这样下去,直到栈为空。

中序遍历二叉树:思想:利用栈。

从根节点开始,循环,只要有左子节点则进栈,直到左子节点为空。

接着弹出栈顶输出,判断该结点是否有右子节点,若有则进栈,若没有继续弹栈。

有右子节点的情况,判断该节点是否有左子节点,有则进栈,直到左子节点为空;若该右子节点没左子节点,则弹栈;判断弹出的节点,是否有右子节点,若有则进栈,没有继续弹栈;接着又要判断刚进栈的这个节点,是否有左子节点,有则进栈,没有则继续弹栈。

重复下去....栈空,是判定条件。

后序遍历二叉树算法:思想:利用栈来实现。

从根结点开始,只要左子节点非空,则进栈,直到左子节点为空为止。

取出栈顶元素(只是取,并去弹栈),判断1:取出的栈顶元素是否有右子节点,或者右子节点是否被访问过,若满足条件(无右子节点,或者右子节点被访问过),则输出该结点,同时弹栈,并且记录下该访问的节点2:取出的栈顶元素,若有右子节点,且未被访问过,则指针继续移动到右子节点,重复一开始是否又左子节点的判断。

2、本程序包含七个模块1)主函数int main(){建立一棵二叉树;前序遍历:递归的实现;中序遍历:递归的实现;后序遍历:递归的实现;二叉树的高度;层次遍历二叉树;}2)创建二叉树,利用递归的方法——BTree* Create()3)前序遍历,递归的方法——void Preorder(BTree* bt)4)中序遍历,递归的方法——void Inorder(BTree* bt)5)后序遍历,递归实现——void Postorder(BTree* bt)6)层次遍历二叉树,用队列来实现——void TraversalOfLevel(BTree* bt)7)求二叉树的高度,递归实现——int Height(BTree* bt)3、元素类型、结点类型和各结构体二叉树结点的结构体表示形式typedef struct node{char data;struct node* left,*right;}BTree;栈的结构体表示形式typedef struct stackelem{ BTree* a[MAXSIZE];nt top;}Stack;队列的结构体的表示形式typedef struct queueelem{BTree* b[MAXSIZE];int front,rear;}Queue;4、主函数和其他函数清单int main(){}BTree* Create()//创建二叉树,利用递归的方法{}void Preorder(BTree* bt)//前序遍历,递归的方法{}void Inorder(BTree* bt)//中序遍历,递归的方法{}void Postorder(BTree* bt)//后序遍历,递归实现{}void TraversalOfLevel(BTree* bt)//层次遍历二叉树,用队列来实现{}int Height(BTree* bt)//求二叉树的高度,递归实现{}四、调试分析创建二叉树执行先序,中序,后序,遍历,求高度的算法五、总结通过这次实验我也着实又感受了一次编程的乐趣,从中也学到了不少知识。

我感受最深的是:以前用C变成,只是注重如何编写函数能够完成所需要的功能,没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序。

感觉有点像张飞打仗,有勇无谋,只要能完成任务就行。

但现在编程感觉完全不同了。

首先选取自己需要的数据结构,是树还是图或是别的什么,然后选定一种或几种存储结构来具体的决定后面的函数的主要风格。

最后在编写每一个函数之前,可以仔细斟酌比较,挑选出最适合当前状况的算法。

这样,即使在完整的程序还没有写出来之前,自己心中已经有了明确的想法了。

只有真正理解定义数据类型的好处,才能用好这样一种数据结构。

了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。

这次试验中我在用一维数组顺序表结构编写程序时,错误的运用静态链表来实现函数功能,这是我对基本概念理解的模糊不清造成的,不过至少我又联系了运用静态链表来实现同样的功能,同时我也发现两者在很多函数上是互通的,只需稍作修改即可移植。

总之,以后还需要努力,不断进步。

六、源代码#include "stdio.h"#include "malloc.h"#include"iostream.h"#define MAXSIZE 20//二叉树结点的结构体表示形式typedef struct node{char data;struct node* left,*right;}BTree;//栈的结构体表示形式typedef struct stackelem{BTree* a[MAXSIZE];int top;}Stack;//队列的结构体的表示形式typedef struct queueelem{BTree* b[MAXSIZE];int front,rear;}Queue;//创建二叉树,利用递归的方法BTree* Create(){char ch;scanf("%c",&ch);getchar();if (ch=='#'){return NULL;}else{BTree* btree=(BTree*)malloc(sizeof(BTree)); if (NULL==btree){return NULL;}btree->data=ch;btree->left=Create();btree->right=Create();return btree;}}//前序遍历,递归的方法void Preorder(BTree* bt){if (NULL!=bt){printf("%c ",bt->data);Preorder(bt->left);Preorder(bt->right);}}//中序遍历void Inorder(BTree* bt){if (NULL!=bt){Inorder(bt->left);printf("%c ",bt->data); Inorder(bt->right);}}//后序遍历,递归实现void Postorder(BTree* bt){if (bt!=NULL){Postorder(bt->left);Postorder(bt->right);printf("%c ",bt->data); }}//求二叉树的高度,递归实现int Height(BTree* bt){int depth1,depth2;if (NULL==bt){return 0;}else{depth1=Height(bt->left); depth2=Height(bt->right); if (depth1>depth2){return (depth1+1);}else{return (depth2+1);}}}//层次遍历二叉树,用队列来实现void TraversalOfLevel(BTree* bt){Queue q;q.front=q.rear=0;if (bt!=NULL){printf("%c ",bt->data);}q.b[q.front]=bt;q.rear=q.rear+1;while (q.front<q.rear){bt=q.b[q.front];q.front=q.front+1;if (bt->left!=NULL){printf("%c ",bt->left->data);q.b[q.rear]=bt->left;q.rear=q.rear+1;}if (bt->right!=NULL){printf("%c ",bt->right->data);q.b[q.rear]=bt->right;q.rear=q.rear+1;}}}int main(){ cout<<"***************欢迎欣赏二叉树***************"<<endl;cout<<"创建二叉树"<<endl;BTree* btr=Create();printf("前序遍历:递归的实现:\n");Preorder(btr);printf("\n");printf("中序遍历:递归的实现:\n"); Inorder(btr);printf("\n");printf("后序遍历:递归的实现:\n"); Postorder(btr);printf("\n");printf("二叉树的高度:\n");int Hgt=Height(btr);printf("%d \n",Hgt);printf("层次遍历二叉树:\n");TraversalOfLevel(btr);printf("\n");return 0;}。

相关文档
最新文档