实验5:树(二叉树)(采用二叉链表存储)
一、实验项目名称
二叉树及其应用
二、实验目的
熟悉二叉树的存储结构的特性以及二叉树的基本操作。
三、实验基本原理
之前我们都是学习的线性结构,这次我们就开始学习非线性结构——树。线性结构中结点间具有唯一前驱、唯一后继关系,而非线性结构中结点的前驱、后继的关系并不具有唯一性。在树结构中,节点间关系是前驱唯一而后继不唯一,即结点之间是一对多的关系。直观地看,树结构是具有分支关系的结构(其分叉、分层的特征类似于自然界中的树)。
四、主要仪器设备及耗材
Window 11、Dev-C++5.11
五、实验步骤
1.导入库和预定义
2.创建二叉树
3.前序遍历
4.中序遍历
5.后序遍历
6.总结点数
7.叶子节点数
8.树的深度
9.树根到叶子的最长路径
10.交换所有节点的左右子女
11.顺序存储
12.显示顺序存储
13.测试函数和主函数
对二叉树的每一个操作写测试函数,然后在主函数用while+switch-case的方式实现一个带菜单的简易测试程序,代码见“实验完整代码”。
实验完整代码:
#include <bits/stdc++.h>
using namespace std;
#define MAX_TREE_SIZE 100
typedef char ElemType;
ElemType SqBiTree[MAX_TREE_SIZE];
struct BiTNode
{
ElemType data;
BiTNode *l,*r;
}*T;
void createBiTree(BiTNode *&T)
{
ElemType e;
e = getchar();
if(e == '\n')
return;
else if(e == ' ')
T = NULL;
else
{
if(!(T = (BiTNode *)malloc(sizeof (BiTNode))))
{
cout << "内存分配错误!" << endl;
exit(0);
}
T->data = e;
createBiTree(T->l);
createBiTree(T->r);
}
}
void createBiTree2(BiTNode *T,int u)
{
if(T)
{
SqBiTree[u] = T->data;
createBiTree2(T->l,2 * u + 1);
createBiTree2(T->r,2 * u + 2);
}
}
void outputBiTree2(int n)
{
int cnt = 0;
for(int i = 0;cnt <= n;i++)
{
cout << SqBiTree[i];
if(SqBiTree[i] != ' ')
cnt ++;
}
cout << endl;
}
void preOrderTraverse(BiTNode *T)
{
if(T)
{
cout << T->data;
preOrderTraverse(T->l);
preOrderTraverse(T->r);
}
}
void inOrderTraverse(BiTNode *T)
{
if(T)
{
inOrderTraverse(T->l);
cout << T->data;
inOrderTraverse(T->r);
}
}
void beOrderTraverse(BiTNode *T)
{
if(T)
{
beOrderTraverse(T->l);
二叉树的基本性质 beOrderTraverse(T->r);
cout << T->data;
}
}
int sumOfVer(BiTNode *T)
{
if(!T)
return 0;
return sumOfVer(T->l) + sumOfVer(T->r) + 1;
}
int sumOfLeaf(BiTNode *T)
{
if(!T)
return 0;
if(T->l == NULL && T->r == NULL)
return 1;
return sumOfLeaf(T->l) + sumOfLeaf(T->r);
}
int depth(BiTNode *T)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论