建立二叉树二叉链表存储结构实现有关操作

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

}

(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<data<

}//先根遍历

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);

相关文档
最新文档