二叉树及其先序遍历

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二叉树及其先序遍历

一、实验目的:

1.明确了解二叉树的链表存储结构。

2.熟练掌握二叉树的先序遍历算法。

一、实验内容:

1.树型结构是一种非常重要的非线性结构。树在客观世界是广泛存在的,在计算

机领域里也得到了广泛的应用。在编译程序里,也可用树来表示源程序的

语法结构,在数据库系统中,数形结构也是信息的重要组织形式。

2.节点的有限集合(N大于等于0)。在一棵非空数里:(1)、有且仅

一个特定的根节点;(2)、当N大于1时,其余结点可分为M(M大于0)

个互不相交的子集,其中每一个集合又是一棵树,并且称为根的子树。树

的定义是以递归形式给出的。

3.二叉树是另一种树形结构。它的特点是每个结点最多有两棵子树,并且,二叉

树的子树有左右之分,其次序不能颠倒。

4.二叉树的结点存储结果示意图如下:

二叉树的存储(以五个结点为例):

三、实验步骤

1.理解实验原理,读懂实验参考程序。

2.

(1)在纸上画出一棵二叉树。

A

B E

C D G F

(2) 输入各个结点的数据。

(3) 验证结果的正确性。

四、程序流程图

先序遍历

五、参考程序

# define bitreptr struct type1 /*二叉树及其先序边历*/ # define null 0

# define len sizeof(bitreptr)

bitreptr *bt;

int f,g;

bitreptr /*二叉树结点类型说明*/

{

char data;

bitreptr *lchild,*rchild;

};

preorder(bitreptr *bt) /*先序遍历二叉树*/

{

if(g==1) printf("先序遍历序列为:\n");

g=g+1;

if(bt)

{

printf("%6c",bt->data);

preorder(bt->lchild);

preorder(bt->rchild);

}

else if(g==2) printf("空树\n");

}

bitreptr *crt_bt() /*建立二叉树*/ {

bitreptr *bt;

char ch;

if(f==1) printf("输入根结点,#表示结束\n"); else printf("输入结点,#表示结束\n");

scanf("\n%c",&ch);

f=f+1;

if(ch=='#') bt=null;

else

{

bt=(bitreptr *)malloc(len);

bt->data=ch;

printf("%c 左孩子",bt->data);

bt->lchild=crt_bt();

printf("%c 右孩子",bt->data);

bt->rchild=crt_bt();

}

return(bt);

}

main()

{

f=1;

g=1;

bt=crt_bt();

preorder(bt);

}

六、思考问题

1. 画出给出的各类型的数据示意图,理解为不同目的而建立的不同数据结构意义。

2. 改写程序完成中、后序遍历。

3. 考虑用非递归算法完成二叉树遍历。

相关文档
最新文档