数据结构实验7

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

实验七二叉树的建立与遍历

一、实验目的

1、了解二叉树的定义及基本运算。

2、掌握二叉树的描述方法、特点、性质及存储结构。

3、掌握二叉树的基本操作算法。

4、自主设计二叉树建立、遍历等操作的整个程序。

二、实验内容

根据建立任意给定的二叉树,并对此二叉树进行前序、中序、后序、层次四种遍历。

基本要求:

1)具有二叉树的创建功能;

2)可以进行二叉树的四种方式的遍历,遍历方式可由用户选择,遍历结果;

3)可统计二叉树中叶子结点、度位2的结点个数及总结点数;

4)可在二叉树中查找某一元素;

5)通过键盘可以建立任意给定的二叉树,并能完成以上操作控制。

5)自己编写、调试所有功能函数程序。

三、程序设计思路

用链式存储结构建立一个二叉树,将二叉树分为根结点、左子树和右子树三部分建立。

二叉树的遍历是指按照某种顺序访问二叉树中的每个结点,使每个结点被访问一次且只被访问一次。常用的二叉树遍历方法如下:

前序遍历:访问次序:根→左→右,

中序遍历:访问次序:左→根→右,

后序遍历:访问次序:左→右→根

层次遍历:访问次序:从上到下、从左到右一层一层进行

可按如下格式定义二叉树的链式存储结构:

typedef char datatype;

typedef struct BiTNode

{ datatype data;

struct BiTNode *lchild, *rchild;

}BiTNode,*BiTree;

模块划分:

1)void CreateBinTree(BiTree *T):以递归方式建立二叉树;

2)void PreOrder(BiTree bt)函数:前序遍历函数;

3)void InOrderOut(BiTree T)函数:中序遍历函数;

4)void PostOrder(BiTree bt)函数:后序遍历函数;

5)void LevelOrder(BiTree bt)函数:层次遍历函数;

6)int Allnode(BiTree root)函数:计算总结点个数函数;

7)BiTree Search(BiTree bt, datatype x)函数:查找函数;

8)int n2(BiTree bt)函数:计算度为2结点个数函数;

9)int CountLeaf(BiTree bt)函数:计算叶子结点个数函数。

四、部分参考源程序段

#include

#include

#define MAXNODE 10

typedef char datatype;

typedef struct BiTNode

{ datatype data;

struct BiTNode *lchild, *rchild;

} BiTNode,*BiTree;

void CreateBinTree(BiTree *T) // 以递归方式建立二叉树

{char ch;

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

if(ch=='0') *T=NULL; // 以0作为空结点的值以结束递归

else { *T=(BiTNode*)malloc(sizeof(BiTNode));

(*T)->data=ch;

CreateBinTree(&(*T)->lchild); CreateBinTree(&(*T)->rchild); }

}

/*BiTree CreateBinTree(BiTree T) // 以递归方式建立二叉树

{char ch;

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

if(ch=='0') T=NULL; // 以0作为空结点的值以结束递归

else { T=(BiTNode*)malloc(sizeof(BiTNode));

T->data=ch;

T->lchild=CreateBinTree(T->lchild); T->rchild=CreateBinTree(T->rchild); }

return(T);

}*/

void PreOrder(BiTree bt)

{ if(bt==NULL) return;

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

PreOrder(bt->lchild);

PreOrder(bt->rchild); }

void InOrderOut(BiTree T)

{

}

void PostOrder(BiTree bt)

{

}

void LevelOrder(BiTree bt)

{ BiTree queue[MAXNODE];

int front,rear;

if(bt==NULL) return;

front=-1;

rear=0;

queue[rear]=bt;

while(front!=rear)

{front++;

printf("%3c",queue[front]->data);

//Visit(queue[front]->data);

if(queue[front]->lchild!=NULL)

{ rear++; queue[rear]=queue[front]->lchild; } if(queue[front]->rchild!=NULL)

{ rear++; queue[rear]=queue[front]->rchild; } }

}

int Allnode(BiTree root)

{ if(!root) return 0;

相关文档
最新文档