数据结构代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
1.二叉树的构造
void creat_tree(Bnode* &T)
{
int x;
cout<<"input"<<" ";
cin>>x;
if(x==-1)
T=NULL;
else{
T=new Bnode;
T->data=x;
creat_tree(T->lChild);
creat_tree(T->rChild);
}
}
2.遍历算法
①先序遍历
void pre_order(Bnode*T)
{
if(T!=NULL)
{
visit(T);
pre_order(T->lChild);
pre_order(T->rChild);
}
}
②中序遍历
void in_order(Bnode*T)
{
if(T!=NULL)
{
in_order(T->lChild);
visit(T);
in_order(T->rChild);
}
}
③后序遍历
void post_order(Bnode*T)
{
if(T!=NULL)
{
post_order(T->lChild);
post_order(T->rChild);
visit(T);
}
}
④二叉树高度
int high(Bnode *T)
{
int h,h1,h2;
if(T==NULL)return 0;
else{
h1=high(T->lChild);
h2=high(T->rChild);
h=((h1>h2) ? h1:h2)+1;
return h;
}
}
3.以先序次序输出森林中每个结点值及对应的层次数
void pre_travel(Tnode*t)
{
if(t!=NULL)
{
visit(t,t->i);
pre_travel(t->first_son);
pre_travel(t->next_brother);
}
}
void visit(Tnode*t,int i)
{
if(t!=NULL)
{
t->i=i+1;
cout<
cout<<"所在层次为:"<
}
}
4.二叉树的层次遍历及编号
void level_order(Bnode*&T,Queue queue) {
if(T==NULL)return;
queue.offer(T);
int i=0;
while(queue.size()>0)
{
Bnode*temp=queue.poll();
temp->num=++i;
visit(temp);
if(temp->lChild!=NULL)
{
queue.offer(temp->lChild);
}
if(temp->rChild!=NULL)
{
queue.offer(temp->rChild);
}
}
}
5.求森林高度
int high(Tnode *T)//森林的高度
{
int h,h1,h2;
if(T==NULL)return 0;
else{
h1=high(T->first_son);
h2=high(T->next_brother);
h=((h1>h2) ? h1:h2)+1;
return h;
}
}
6.求森林中所有叶子结点的值
void leaf_value(Tnode*t)
{
if(t!=NULL)
{
if(t->first_son==NULL)
visit(t);
pre_travel(t->first_son);
pre_travel(t->next_brother);
}
}
void visit(Tnode*t)
{
if(t!=NULL)
{
cout<
}
}
实验总结:
二叉树的学习加深了我对数据结构的理解及学习热情。