建立二叉树二叉链表存储结构实现有关操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验题目:建立二叉树二叉链表存储结构实现有关操作
二、问题描述:
建立二叉树的二叉链表存储结构实现以下操作(选择其中的两个做)
(1)输出二叉树(2)先序遍历二叉树(3) 中序遍历二叉树
(4)后序遍历二叉树(5)层次遍历二叉树
三、需求分析:
我选做以上的2.3两小问
(1)建立二叉链表树
(2)先序遍历二叉树:
若二叉树为空,则空操作;否则先访问根结点,再先序遍历左子树,最后先序遍历右子树
(3) 中序遍历二叉树:
若二叉树为空,则空操作;否则先访问根结点,再中序遍历左子树,最后中序遍历右子树
(4)测试数据:a,b,c,d,e;测试输出结果为:先根遍历:a,b,d,c,e 中根遍历:b,d,a,e,c
四、概要设计:
(1)结点结构定义:
struct btnode
{
char data; //数据
bitreptr lchild; //左节点指针
bitreptr rchild; //右节点指针
};
(2)二叉树的定义与初始化:
bitreptr CreateTree( )
{
bitreptr a,b,c,d,e;
bitreptr nodes[5];
for(int j=0;j<5;j++)
{
nodes[j]=(bitreptr)malloc(sizeof(btnode));
nodes[j]->lchild=NULL;
nodes[j]->rchild=NULL ;
}
a=nodes[0];
b=nodes[1] ;
c=nodes[2];
d=nodes[3];
e=nodes[4];
a->data='a';
a->lchild=b;
a->rchild=c;
b->data='b';
b->rchild=d;
c->data='c';
c->lchild=e;
d->data='d';
e->data='e';
return a;
}
void visit(const bitreptr node)
{
cout< } (3)先序遍历: void preorder(const bitreptr root) { bitreptr node=root; if (node!=NULL) { visit(node); preorder(node->lchild); preorder(node->rchild); } } (4)中根遍历: void inorder(const bitreptr root) { bitreptr node=root; if (node!=NULL) { inorder(node->lchild); visit(node); inorder(node->rchild); } } 五、详细设计及模块代码: #include "malloc.h" #include "iostream.h" typedef struct btnode * bitreptr; struct btnode { char data; //数据 bitreptr lchild; //左节点指针 bitreptr rchild; //右节点指针 }; //建立一个树,函数返回一个树的头指针bitreptr CreateTree( ) { bitreptr a,b,c,d,e; bitreptr nodes[5]; for(int j=0;j<5;j++) { nodes[j]=(bitreptr)malloc(sizeof(btnode)); nodes[j]->lchild=NULL; nodes[j]->rchild=NULL; } a=nodes[0]; b=nodes[1]; c=nodes[2]; d=nodes[3]; e=nodes[4]; a->data='a'; a->lchild=b; a->rchild=c; b->data='b'; b->rchild=d; c->data='c'; c->lchild=e; d->data='d'; e->data='e'; return a; } void visit(const bitreptr node) { cout< }//先根遍历 void preorder(const bitreptr root) { bitreptr node=root; if (node!=NULL) { visit(node); preorder(node->lchild); preorder(node->rchild); } } //中根遍历 void inorder(const bitreptr root) { bitreptr node=root; if (node!=NULL) { inorder(node->lchild);