数据结构代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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<data<<" ";

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<data<<" ";

}

}

实验总结:

二叉树的学习加深了我对数据结构的理解及学习热情。

相关文档
最新文档