数据结构课程设计-二叉树的基本操作

合集下载

二叉树的基本操作

二叉树的基本操作

二叉树的基本操作二叉树是一种常见的数据结构,它由节点组成,每个节点最多有两个子节点。

二叉树在计算机领域中得到广泛应用,它的基本操作包括插入、删除、查找、遍历等。

1.插入操作:二叉树的插入操作是将一个新的节点添加到已有的二叉树中的过程。

插入操作会按照一定规则将新节点放置在正确的位置上。

插入操作的具体步骤如下:-首先,从根节点开始,比较新节点的值与当前节点的值的大小关系。

-如果新节点的值小于当前节点的值,则将新节点插入到当前节点的左子树中。

-如果新节点的值大于当前节点的值,则将新节点插入到当前节点的右子树中。

-如果当前节点的左子树或右子树为空,则直接将新节点插入到该位置上。

-如果当前节点的左子树和右子树都不为空,则递归地对左子树或右子树进行插入操作。

2.删除操作:二叉树的删除操作是将指定节点从二叉树中删除的过程。

删除操作有以下几种情况需要考虑:-如果待删除节点是叶子节点,则直接将其从二叉树中删除即可。

-如果待删除节点只有一个子节点,则将其子节点替换为待删除节点的位置即可。

-如果待删除节点有两个子节点,则需要找到其左子树或右子树中的最大节点或最小节点,将其值替换为待删除节点的值,然后再删除最大节点或最小节点。

3.查找操作:二叉树的查找操作是在二叉树中查找指定值的节点的过程。

查找操作的具体步骤如下:-从根节点开始,将待查找值与当前节点的值进行比较。

-如果待查找值等于当前节点的值,则返回该节点。

-如果待查找值小于当前节点的值,则在当前节点的左子树中继续查找。

-如果待查找值大于当前节点的值,则在当前节点的右子树中继续查找。

-如果左子树或右子树为空,则说明在二叉树中找不到该值。

4.遍历操作:二叉树的遍历操作是按照一定规则依次访问二叉树中的每个节点。

有三种常用的遍历方式:- 前序遍历(Preorder Traversal):先访问根节点,然后递归地前序遍历左子树和右子树。

- 中序遍历(Inorder Traversal):先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。

二叉树的存储结构及基本操作

二叉树的存储结构及基本操作

二叉树的存储结构及基本操作二叉树是一种常见的数据结构,广泛应用于计算机科学领域。

二叉树具有其独特的存储结构和基本操作,下面将详细介绍。

一、二叉树的存储结构二叉树的存储结构通常有两种形式:顺序存储和链式存储。

1. 顺序存储顺序存储是将二叉树中的所有元素按照一定的顺序存储在一段连续的内存单元中,通常采用数组来表示。

对于任意一个节点i,其左孩子节点的位置为2*i+1,右孩子节点的位置为2*i+2。

这种存储方式的优点是访问速度快,但需要预先确定节点总数,且不易于插入和删除操作。

2. 链式存储链式存储是采用指针的方式将二叉树的节点链接起来。

每个节点包含数据元素以及指向左孩子节点和右孩子节点的指针。

链式存储方式的优点是易于插入和删除操作,但访问速度较慢。

二、二叉树的基本操作1. 创建二叉树创建二叉树的过程就是将数据元素按照一定的顺序插入到二叉树中。

对于顺序存储的二叉树,需要预先分配内存空间;对于链式存储的二叉树,可以直接创建节点对象并链接起来。

2. 遍历二叉树遍历二叉树是指按照某种规律访问二叉树中的所有节点,通常有前序遍历、中序遍历和后序遍历三种方式。

前序遍历的顺序是根节点-左孩子节点-右孩子节点;中序遍历的顺序是左孩子节点-根节点-右孩子节点;后序遍历的顺序是左孩子节点-右孩子节点-根节点。

对于顺序存储的二叉树,可以采用循环结构实现遍历;对于链式存储的二叉树,需要使用指针逐个访问节点。

3. 查找元素在二叉树中查找元素,需要根据一定的规则搜索所有节点,直到找到目标元素或搜索范围为空。

对于顺序存储的二叉树,可以采用线性查找算法;对于链式存储的二叉树,可以采用深度优先搜索或广度优先搜索算法。

4. 插入元素在二叉树中插入元素需要遵循一定的规则,保证二叉树的性质。

对于顺序存储的二叉树,插入操作需要移动大量元素;对于链式存储的二叉树,插入操作相对简单,只需修改指针即可。

5. 删除元素在二叉树中删除元素同样需要遵循一定的规则,保证二叉树的性质。

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

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

实验三二叉树的基本运算一、实验目的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;}四、调试结果及运行界面:五、实验心得通过这次程序上机实验让我认识到了以前还不太了解的二叉树的性质和作用,这次实验的的确确的加深了我对它的理解。

二叉树及二叉树的基本操作(基础篇)

二叉树及二叉树的基本操作(基础篇)

⼆叉树及⼆叉树的基本操作(基础篇)⼀、相关概念树是n( n>=0)个有限个数据的元素集合,它的数据的存储结构形状像⼀颗倒过来的树。

根在上,叶在下:如图所⽰1.⼀个独⽴的节点也可看作⼀棵树,它既为根节点,⼜为叶⼦节点;2.⼀个节点也没有称作空树;3.这是⼀颗典型的树,根节点为A;4.⼀个节点只有唯⼀⽗节点。

节点:结点包含数据和指向其它节点的指针。

根节点:树第⼀个结点称为根节点。

结点的度:结点拥有的⼦节点个数。

叶节点:没有⼦节点的节点(度为0)。

⽗⼦节点:⼀个节点father指向另⼀个节点child,则child为孩⼦节点, father为⽗亲节点。

兄弟节点:具有相同⽗节点的节点互为兄弟节点。

节点的祖先:从根节点开始到该节点所经的所有节点都可以称为该节点的祖先。

⼦孙:以某节点为根的⼦树中任⼀节点都称为该节点的⼦孙。

树的⾼度:树中距离根节点最远节点的路径长度。

如图⽰:5.树的存储结构1 struct TreeNode2 {3 DataType data; //节点值4 TreeNode* _firistchild; //第⼀个孩⼦5 TreeMode* _nextchild; //第⼆个孩⼦6 ...7 };有时候根据需要还会加⼊⽗节点,结构如下:1 struct TreeNode2 {3 DataType data; //节点值4 TreeNode* _parent;5 TreeNode* _firistchild; //第⼀个孩⼦6 TreeMode* _nextchild; //第⼆个孩⼦7 ...8 };⼆、⼆叉树1.⼆叉树:⼆叉树是⼀棵特殊的树,⼆叉树每个节点最多有两个孩⼦结点,分别称为左孩⼦和右孩⼦。

如图:2.存储结构1 template <class T>2 struct TreeNode //定义⼆叉树结点3 {5 TreeNode<T>* _left; //指向左⼦树的指针6 TreeNode<T>* _right; //指向右⼦树的指针7 T _data; //节点数据8 TreeNode(const T& n)9 :_left(NULL)10 ,_right(NULL)11 ,_data(n)12 {}13 };有时候根据需要还会加⼊⽗节点,结构如下:1 template <class T>2 struct TreeNode //定义⼆叉树结点3 {4 TreeNode<T>* _parent; //指向⽗节点的指针5 TreeNode<T>* _left; //指向左⼦树的指针6 TreeNode<T>* _right; //指向右⼦树的指针7 T _data; //节点数据8 TreeNode(const T& n)9 :_left(NULL)10 ,_right(NULL)11 ,_data(n)12 {}13 };3.特殊的⼆叉树满⼆叉树:⾼度为N的满⼆叉树有2^N - 1个节点的⼆叉树。

c语言二叉树的基本操作

c语言二叉树的基本操作

c语言二叉树的基本操作一、概念二叉树是一种数据结构,它由节点组成,每个节点都有0个或2个子节点,左子节点的关键字小于或等于该节点的关键字,右子节点的关键字大于该节点的关键字。

二、基本操作1、创建二叉树(1)结构体定义typedef struct node{int data; // 数据struct node *left; // 左子节点struct node *right; // 右子节点}Node, *pNode;(2)创建节点return p;}// 创建根节点*pTree = create_node(arr[0]);// 寻找合适的位置插入节点while (p != NULL){q = p;if (arr[i] < p->data)p = p->left;elsep = p->right;}2、遍历二叉树遍历二叉树有三种方法,分别是前序遍历、中序遍历和后序遍历。

(1)前序遍历void pre_order(pNode pTree){if (pTree != NULL){printf("%d ", pTree->data);pre_order(pTree->left);pre_order(pTree->right);}}3、查找节点找到关键字为data的节点,返回指向该节点的指针。

pNode search_node(pNode pTree, int data){if (pTree == NULL)return NULL;4、计算深度计算二叉树的深度,即为根节点到叶子节点的最长路径所包含的节点个数。

return left_depth > right_depth ? left_depth + 1 : right_depth + 1; }5、计算叶子节点数return leaf_count(pTree->left) + leaf_count(pTree->right);}6、删除节点删除节点分为两种情况:(1)被删除节点为叶子节点直接将其父节点指向该节点的指针设置为NULL即可。

数据结构二叉树的基本操作

数据结构二叉树的基本操作

数据结构与算法课程实验报告实验四:二叉树的基本操作姓名:沈靖雯班级:14信息与计算科学(2)班学号:2014326601094实验四二叉树的基本操作【实验内容】实现创建和遍历二叉树的基本操作【实验目的】掌握二叉树的定义和存储表示,学会建立一棵特定二叉树的方法;掌握二叉树的遍历算法(先序、中序、后序遍历算法)的思想,并学会遍历算法的递归实现和非递归实现。

【问题描述】(1)编程实现构造一棵二叉树的算法,适合任意合法输入的二叉树的建立,并进行相应异常处理。

(2)编程实现在二叉链表这种存储方式下,实现二叉的遍历,可采用递归或者非递归实现,遍历算法可在先序、中序和后序遍历算法中任选其一。

【问题实现】一、实现链队列基本运算(1)抽象数据类型ADT BTree {数据对象D: D是具有相同特性的数据元素的集合。

基本操作:CreatBiTree(*T)操作结果:构造二叉树T。

PreOrderTraverse(T)初始条件:二叉树T已存在。

操作结果:先序遍历T。

InOrderTraverse(T)初始条件:二叉树T已存在。

操作结果:中序遍历T。

PostOrderTraverse(T)初始条件:二叉树T已存在。

操作结果:后序遍历T。

} ADT BTree(2)主要实现思路与主要程序代码:1).首先定义二叉树结点结构;typedef struct Node{char data;struct Node *lchild,*rchild; //左右孩子指针}BiTNode,*BTree;2).其次定义一个二叉树构造函数int CreatBiTree(BTree *T);采用递归先序法构造二叉树;scanf("%c",&ch);if(ch==' ')*T=NULL;//T为空二叉树else{if(!(*T=(BTree)malloc(sizeof(BiTNode)))) return (OVERFLOW);(*T)->data=ch;CreatBiTree(&((*T)->lchild));CreatBiTree(&((*T)->rchild));}3).定义遍历函数(递归先序为例);//先序遍历二叉树,递归实现void PreOrderTraverse(BTree T){if(T){ printf("%c ",T->data);PreOrderTraverse (T->lchild);PreOrderTraverse (T->rchild);}}这里用printf代替visit(),简化程序代码;4).定义主函数,总体完成以上所有函数功能的实现(构建二叉树与遍历二叉树)。

c语言数据结构二叉树的基本操作 -回复

c语言数据结构二叉树的基本操作 -回复

c语言数据结构二叉树的基本操作-回复C语言数据结构:二叉树的基本操作概述:二叉树是一种常用的数据结构,在计算机科学中广泛应用于各种算法和问题的解决方案中。

它的特点是每个节点至多有两个子节点,即左子节点和右子节点,且子节点的顺序不能颠倒。

本文将介绍常见的二叉树基本操作,包括创建二叉树、插入节点、删除节点、查找节点、遍历等。

1. 创建二叉树:创建一个二叉树的方法是从根节点开始,逐个插入子节点。

首先定义一个二叉树的结构体,包含一个值和指向左右子节点的指针。

然后使用malloc 函数分配内存空间,并将值赋给根节点的指针。

接着创建左子节点和右子节点,将子节点的指针分别赋给根节点的左右指针。

这样就完成了一个简单的二叉树的创建。

2. 插入节点:插入节点是在现有的二叉树上新增一个节点。

首先找到插入节点的位置,可以从根节点开始逐级比较。

如果插入节点的值小于当前节点,则向左子树查找,否则向右子树查找,直到找到合适的位置。

然后创建一个新节点,并将新节点的指针赋给找到位置的节点的左或右指针。

3. 删除节点:删除节点是将现有的二叉树中的一个节点删除。

首先找到要删除的节点位置,可以通过比较节点的值进行查找,直到找到要删除的节点。

然后根据删除节点的情况分三种情况考虑:若删除节点为叶子节点,直接删除即可;若删除节点只有一个子节点,将子节点的指针赋给删除节点的父节点,然后删除删除节点;若删除节点有两个子节点,需要找到删除节点的左子树中的最大节点或右子树中的最小节点,将其值赋给删除节点,然后删除此最大或最小节点。

4. 查找节点:查找节点是在现有的二叉树中寻找一个特定的节点。

与插入和删除类似,从根节点开始比较节点的值,若要查找的节点值小于当前节点,则继续向左子树查找,否则向右子树查找,直到找到要查找的节点。

若找到了节点,返回此节点的指针;若未找到,返回空指针。

5. 遍历:遍历二叉树是按照一定的顺序访问树中的所有节点。

常见的遍历方式有三种:前序遍历、中序遍历和后序遍历。

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

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

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

3.
int head;//队头指针
4.
int tail;//队尾指针
5. } SqQueue;
队列主要用于二叉树遍历过程中的层序遍历,从根节点开始分别将左右孩子放入队列,然后从对头开
始输出。队列的相关操作封装在 SqQueue.h 中,包括入队、出队、判断队列是否为空等操作。
2
四、全局函数的设计
本程序中应用了一些全局函数,本着用到那个函数就把哪个函数设为全局函数的原则,抽象 出了以下全局函数:
9
(9)void swap(BiTree* b) 本函数用子树交换
(10)void displayMenu() 本函数用于展示菜单
4.2 全局函数在具体系统中的分布
BiTree.h 此文件为二叉树的头文件,包含上述所有全局函数
五、功能实现
二叉树的基本操作这个程序的主要功能就是建立二叉树,然后运用先序、中序等遍历方法遍历二叉树, 然后还有统计二叉树的叶子结点个数、求二叉树的深度以及进行子树的交换。
10. }
5.2.5 子树交换
1. //子树交换 7
2. BiTree* temp;//临时变量,用于交换
3. void swap(BiTree* b) {
4.
if (b == NULL) {
5.
return;
6.
}
7.
else {
8.
temp = b->lchild;
9.
b->lchild = b->rchild;
12. }
(4) 层序遍历
1. //层序遍历
2. void LevelOrderTraverse(BiTree* b) {
3.
SqQueue* s = initSqQueue();
4.
BiTree* temp;
5.
if (b) {
6.
append(s, *b);
7.
while (!isEmpty(s)) {
4.1 全局函数列表
(1)BiTree* createBinaryTree(BiTree* b) 本函数用于建立二叉树
(2)void Traverse(BiTree* b) 本函数用于遍历二叉树
(3)void PreOrderTraverse(BiTree* b) 本函数用于前序遍历二叉树
(4)void InOrderTraverse(BiTree* b) 本函数用于中序遍历二叉树
二叉树的基本操作
摘要:
本次课程设计通过对二叉树的一系列操作主要练习了二叉树的建立、四种遍历方式:先 序遍历、中序遍历、后序遍历和层序遍历以及节点数和深度的统计等算法。增加了对二叉树 这一数据结构的理解,掌握了使用 c 语言对二叉树进行一些基本的操作。
关键字:递归、二叉树、层序遍历、子树交换
一、程序简介
3
5.1 二叉树的基本操作流程图如下
菜单界面如下:
5.2 二叉树的基本操作的代码如下
5.2.1 二叉树的建立
1. //按照前序输入二叉树结点的值,“#”表示空
2. BiTree* createBinaryTree(BiTree* b) {
3.
char ch;//定义变量用于储存输入的字符
4
4. 5. 6. 7. 8. 9.
if (!b) {
5.
return 0;
6.
}
7.
leftHeight = getHeight(b->lchild);
8.
rightHeight = getHeight(b->rchild);
9.
return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;
//生成根节点 b->data = ch; //构造左子树 b->lchild=createBinaryTree(b->lchild); //构造右子树 b->rchild=createBinaryTree(b->rchild); } } return b;
5.2.2 二叉树的遍历 如图所示选择遍历后有三种方案可供选择:
(5)void PostOrderTraverse(BiTree* b) 本函数用于后序遍历二叉树
(6)void LevelOrderTraverse(BiTree* b) 本函数用于层序遍历二叉树
(7)void getLeavesNum(BiTree* b) 本函数用于统计叶子结点个数
(8)int getHeight(BiTree* b) 本函数用于求二叉树的深度
(1) 前序遍历
1. void PreOrderTraverse(BiTree* b) {
2.
if (b == NULL) {
3.
return;
4.
}
5.
//首先打印结点数据
6.
printf("%c ", b->data);
7.
//再先序遍历左子树
8.
PreOrderTraverse(b->lchild);
3.
if (b == NULL) {
4.
return;
5.
}
6.
//首先后序遍历左子树
7.
PostOrderTraverse(b-&g历右子树
9.
PostOrderTraverse(b->rchild);
10.
//最后打印结点数据
11. printf("%c ", b->data);
4.
struct BiNode* rchild;
5. }BiTree;
//左孩子 //右孩子
用一个字符型保存节点数据,分别定义两个 struct BiNode 类型的指针来指向左孩子和右孩子。在 BiTree.h 中实现相关的功能。
3.2 队列的实现
1. typedef struct {
2.
ElemType* data;
9.
//最后先序遍历右子树
10. PreOrderTraverse(b->rchild);
11. }
5
(2) 中序遍历
1. //中序遍历
2. void InOrderTraverse(BiTree* b) {
3.
if (b == NULL) {
4.
return;
5.
}
6.
//首先中序遍历左子树
7.
2.1 功能模块图
2.2 功能模块详解
2.2.1 建立二叉树
输入要建立的二叉树的扩展二叉树的先序遍历序列,来建立二叉树,建立成功会给出 提示。 2.2.2 遍历二叉树
执行操作之后会有四个选项可供选择:先序遍历、中序遍历、后序遍历、层序遍历。 输入对应的序号即可调动相关函数输出相应的遍历序列。 2.2.3 统计叶子节点树
10.
b->rchild = temp;
11.
swap(b->lchild);
12.
swap(b->rchild);
13. }
14. }
部分运行结果截图如下: 建立二叉树:
统计叶子节点个数:
8
求二叉树的深度:
六、参考文献
1. Stephen Prata.《C Primer Plus (第 6 版) 中文版》. 人民邮电出版社. 2016 年 2. CSDN 博客:https:// 3. 谭浩强.《C 程序设计(第四版)》.清华大学出版社. 4. 严蔚敏《数据结构》c 语言版 第二版 人民邮电出版社
作 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. }
scanf("%c", &ch); if (ch == '#') {
b = NULL; } else {
if ((b = (BiTree*)malloc(sizeof(BiTree))) != NULL) {//如果内存分配成功就执行下面操
本程序名为“二叉树基本操作的实现”,其主要为练习二叉树的基本操作而开发,其中包含了建立、遍 历、统计叶子结点和深度等一系列操作。其中定义二叉链表来表示二叉树,用一个字符类型的数据来表示 每一个节点中存储的数据。由于没有进行图形界面的设计,用户可以通过程序中的遍历二叉树一功能来查 看操作的二叉树。
二、功能模块
6
8.
temp=pop(s);
9.
printf("%c ", temp->data);
10.
if (temp->lchild) {
11.
append(s, *temp->lchild);
12.
}
13.
if (temp->rchild) {
14.
append(s, *temp->rchild);
15.
执行之后输出叶子结点的个数。 2.2.4 求二叉树深度
执行之后输出二叉树的深度。 2.2.5 子树交换
交换成功则会给出提示,用户可通过遍历二叉树来观察子树交换之后的二叉树。
三、数据结构和算法设计
3.1 二叉链表的设计
1. typedef struct BiNode {
2.
char data;
3.
struct BiNode* lchild;
7.
}
8.
getLeavesNum(b->lchild);
9.
getLeavesNum(b->rchild);
10. }
相关文档
最新文档