实验五--二叉树的存储结构和基本操作

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

实验五二叉树的存储表示和基本操作

实验内容

1. 二叉树的二叉链表的存储结构

—————二叉树的二叉链表存储表示————————

typedef struct node

{

ElemType data; /*数据元素*/

struct node *lchild; /*指向左孩子*/

struct node *rchild; /*指向右孩子*/

} BTNode;

2. 二叉树的基本操作

(1)创建操作:创建一棵二叉树。

(2)查找操作:查找二叉树中值为x的结点。

(3)查找左孩子操作:查找二叉树中值为x的结点的左孩子。

(4)查找右孩子操作:查找二叉树中值为x的结点的右孩子。

(5)求深度操作:求二叉树的深度。

(6)求宽度操作:求二叉树的宽度。

(7)求结点个数操作:求二叉树的结点个数。

(8)求叶子结点个数操作:求二叉树的叶子结点个数。

(9)输出操作:以括号表示法输出二叉树。

3. 链式队列操作实现的步骤

(1)实现将链式队列的存储结构和基本操作程序代码。

(2)实现main主函数。

4.程序代码完整清单

#include

#include

#define MaxSize 100

typedef char ElemType;

typedef struct node

{

ElemType data; /*数据元素*/

struct node *lchild; /*指向左孩子*/

struct node *rchild; /*指向右孩子*/

} BTNode;

//基本操作函数声明

void CreateBTNode(BTNode *&b,char *str); /*创建一棵二叉树*/ BTNode *FindNode(BTNode *b,ElemType x); /*查找二叉树的结点*/ BTNode *LchildNode(BTNode *p); /*查找二叉树结点的左孩子*/ BTNode *RchildNode(BTNode *p); /*查找二叉树结点的右孩子*/ int BTNodeDepth(BTNode *b); /*求二叉树的深度*/

void DispBTNode(BTNode *b); /*输出二叉树*/

int BTWidth(BTNode *b); /*求二叉树的宽度*/

int Nodes(BTNode *b); /*求二叉树结点个数*/

int LeafNodes(BTNode *b); /*求二叉树叶子结点个数*/

void main()

{

BTNode *b,*p,*lp,*rp;;

CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");

printf("\n");

printf("(1)输出二叉树:");DispBTNode(b);printf("\n");

printf("(2)'H'结点:");

p=FindNode(b,'H');

if (p!=NULL)

{

lp=LchildNode(p);

if (lp!=NULL)

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

else

printf("无左孩子");

rp=RchildNode(p);

if (rp!=NULL)

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

else

printf("无右孩子");

}

printf("\n");

printf("(3)二叉树b的深度:%d\n",BTNodeDepth(b));

printf("(4)二叉树b的宽度:%d\n",BTWidth(b));

printf("(5)二叉树b的结点个数:%d\n",Nodes(b));

printf("(6)二叉树b的叶子结点个数:%d\n",LeafNodes(b));

printf("\n");

}

void CreateBTNode(BTNode *&b,char *str) /*由str串创建二叉链*/

{

BTNode *St[MaxSize],*p=NULL;

int top=-1,k,j=0;

char ch;

b=NULL; /*建立的二叉树初始时为空*/

ch=str[j];

while (ch!='\0') /*str未扫描完时循环*/

{

switch(ch)

相关文档
最新文档