- 3
- 0
- 约3.87千字
- 约 9页
- 2023-08-22 发布于湖北
- 举报
数据结构实验报告
专业班级:计算机科学与技术
姓名:。。。。。。
学号:。。。。。。。
一、实验目的和要求
上机学习二叉树。
二、实验内容
实现二叉树的各项算法并掌握其用法如二叉树的构造,先中后序遍历,层次遍历等等
三、实验过程
3.1 设计算法
1.二叉树的构造:通过对二叉树的先序序列的扩展来构造二叉树
2.求二叉树的高度:二叉树的高度等于子树高度加一,递归求出二叉树高度。
3二叉树的层次遍历:初始化队列,使根节点进队。下面开始循环,终止条件为队列为空。是队头结点出队,并使它的左孩子和右孩子一次进队(如果存在)
4.求二叉树叶子结点:遍历二叉树,如果左孩子和右孩均不存在,则该结点为叶子结点。
3.2 数据结构的选择和概要设计
数据结构的选择:学习二叉树结构,利用队列实现其中的层次遍历。
概要设计:利用类将二叉树和其属性封装起来,定义结构体变量作为结点。
四、测试及结果分析
输入空树
输入空树
五、实验收获
通过课堂学习以及课后的上机实习,我学习到了树和二叉树的性质,以及相关算法。如二叉树的遍历,求二叉树的高度。并在这些算法实现的过程中对递归有了更加深的了解,并且认识到了递归的重要性
六、附录(源代码)
#includeiostream.h
#includequeue
using namespace std;
struct node{
char data;
node*lchild;
node*rchild;
int num;
};
class Tree{
public:
Tree(){
cout请输入data ;
creat(root);
}
bool empty(){
if(root==NULL)
return true;
return false;
}
void pre_number(){
if(empty())
return;
T_pre_number(this-root);
}
void pre_travel(){
if(empty())
return;
int i=1;
node* t=this-root;
T_pre_travel(t,i);
coutendlendl;
}
void preorder(){
if(empty())
return;
node* t=this-root;
cout先序:;
T_preorder(t);
coutendl;
}
void inorder(){
if(empty())
return;
cout中序:;
node* t=this-root;
T_inorder(t);
coutendl;
}
void postorder(){
if(empty())
return;
cout后序:;
node* t=this-root;
T_postorder(t);
coutendl;
}
void high(){//
if(empty())
return;
cout该二叉树的高度为T_high(this-root)endl;
}
void leaf_value(){//
if(empty())
return;
node* t=this-root;
cout叶子结点:;
T_leaf_value(t);
coutendl;
}
void level_order(){ //
if(empty())
return;
node*T=this-root;
T_level_order(T);
}
private:
void T_pre_travel(node*T,int i);//
void Tree::T_preorder(node*T); //
void Tree::T_inorder(node*T); //
void Tree::T_postorder(node*T); //
int T_high(node* T);//
void T_leaf_value(node*T);//
void creat(node* T);//
void T_level_order(node*T);
void T_pre_number(node* root);
node*root;
};
//先序输出结点及其编号
void Tree::T_pre_number(node*T)
{
if(T!=NULL){
coutT-data的编号是T-numendl;
T_pre_n
原创力文档

文档评论(0)