二叉树的实现及遍历

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

实验三:二叉树的实现及遍历

实验内容:

1) 采用二叉树链表作为存储结构,完成二叉树的建立,

先序、中序和后序以及按层次遍历的操作,求所有叶子及结点总数的操作。

2) 输出树的深度,最大元,最小元。

实现代码如下:

#include"stdio.h"

#include"stdlib.h"

#define Max 50

typedefstruct Node

{

char data;

struct Node *lchild,*rchild;

}BinTNode;

typedefBinTNode *BiTree;

intNodeNum,BileafNum;/*NodeNum为结点数,leafNum为叶子结点数*/

int max=-100;/*把max定义得足够小,A的ASCII值为065*/

int min=100;/*把min定义得足够大,Z的ASCII值为090*/

BiTreeCreatBiTree()/*创建二叉树*/

{

BiTree T;

charch;

if((ch=getchar())=='#')

return(NULL);

else

{

T=(BinTNode *)malloc(sizeof(BinTNode)); /*生成新结点*/

T->data=ch;

T->lchild=CreatBiTree(); /*构造左子树*/

T->rchild=CreatBiTree(); /*构造右子树*/ return(T);

}

}

void PreOrderTraverse(BiTree T)/*先序遍历*/

{

if(T) {

printf("%c",T->data);

PreOrderTraverse(T->lchild);

PreOrderTraverse(T->rchild);

}

void InOrderTraverse(BiTree T)/*中序遍历*/ {

if(T)

{

InOrderTraverse(T->lchild);

printf("%c",T->data);

InOrderTraverse(T->rchild);

}

}

void PostOrderTraverse(BiTree T)/*后序遍历*/ {

if(T){

PostOrderTraverse(T->lchild);

PostOrderTraverse(T->rchild);

printf("%c",T->data);

}

}

int Tree(BiTree T)

{

inthl,hr,h;

{

hl=Tree(T->lchild); /*求左子树深度*/

hr=Tree(T->rchild); /*求子树右深度*/

h=hl>hr? hl:hr;

NodeNum=NodeNum+1;

if(hl==0&&hr==0) BileafNum++; /*如果左右深度为0,即为叶子结点*/

return(h+1);

}

else return(0);

}

void LevelOrderTraverse(BiTree T)/*层序遍历*/

{

int front=0,rear=1;

BinTNode *cq[Max],*p;

cq[1]=T;

while(front!=rear)

{

front=(front+1)%NodeNum;

p=cq[front];

printf("%c",p->data);

if(p->lchild!=NULL){

rear=(rear+1)%NodeNum;

cq[rear]=p->lchild;

}

if(p->rchild!=NULL){

rear=(rear+1)%NodeNum;

cq[rear]=p->rchild;

}

}

}

int MAX(BiTree T)/*求最大元函数*/ {

if(T==NULL)

return 0;

if(T!=NULL)

{

if(T->data>max)

max=T->data;

MAX(T->lchild);

MAX(T->rchild);

}

return max;

}

int MIN(BiTree T)/*求最小元函数*/

{

if(T==NULL)

return 0;

if(T!=NULL)

{

if(T->data

min=T->data;

MIN(T->lchild);

MIN(T->rchild);

}

return min;

}

void main()

{

BiTree root;

int depth;

printf("\n");

printf("按前序序列输入(如ABD##E##C#F##):");

相关文档
最新文档