二叉树的遍历_二叉树及其遍历

2020-02-27 其他范文 下载本文

二叉树的遍历由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“二叉树及其遍历”。

# include # include typedef int Etype;typedef struct BiTNode /* 树结点结构 */

{ Etype data;

struct BiTNode *lch,*rch;

}BiTNode;/* 函数原形声明 */ BiTNode *creat_bt1();BiTNode *creat_bt2();void preorder(BiTNode *p);void inorder(BiTNode *p);void postorder(BiTNode *p);void numb1(BiTNode *p);void numb2(BiTNode *p);void numb3(BiTNode *p);BiTNode *t;int n,n0,n1,n2;/* 主函数 */ main(){ char ch;int k;

do { printf(“nnn”);

printf(“nn

1.建立二叉树方法1 ”);

printf(“nn

2.建立二叉树方法2”);

printf(“nn

3.前序递归遍历二叉树”);

printf(“nn

4.中序递归遍历二叉树”);

printf(“nn

5.后序递归遍历二叉树”);

printf(“nn

6.前序计算树中结点个数”);

printf(“nn

7.中序计算树中结点个数”);

printf(“nn

8.后序计算树中结点个数”);

printf(“nn

9.结束程序运行”);

printf(“n======================================”);

printf(“n

请输入您的选择(1-9)”);scanf(“%d”,&k);

switch(k)

{ case 1:t=creat_bt1();break;/* 调用性质5建立二叉树算法 */

case 2:t=creat_bt2();break;/* 调用递归建立二叉树算法

*/

case 3: { preorder(t);

/* 调用前序遍历

*/

printf(“nn

打回车键,继续。”);ch=getch();

} break;

case 4: { inorder(t);

/* 调用中序遍历

*/

printf(“nn

打回车键,继续。”);ch=getch();

} break;

case 5: { postorder(t);

/* 调用后序遍历

*/

printf(“nn

打回车键,继续。”);ch=getch();

} break;

case 6:{ n=0;n0=0;n1=0;n2=0;/* 全局变量置0 */

numb1(t);

printf(“n

二叉树结点总数 n=%d”,n);

printf(“n

二叉树叶子结点数 n0=%d”,n0);

printf(“n

度为1的结点数 n1=%d”,n1);

printf(“n

度为2的结点数 n2=%d”,n2);

printf(“nn

打回车键,继续。”);ch=getch();

} break;

case 7:{ n=0;n0=0;n1=0;n2=0;/* 全局变量置0 */

numb2(t);

printf(“n

二叉树结点总数 n=%d”,n);

printf(“n

二叉树叶子结点数 n0=%d”,n0);

printf(“n

度为1的结点数 n1=%d”,n1);

printf(“n

度为2的结点数 n2=%d”,n2);

printf(“nn

打回车键,继续。”);ch=getch();

} break;

case 8:{ n=0;n0=0;n1=0;n2=0;/* 全局变量置0 */

numb3(t);

printf(“n

二叉树结点总数 n=%d”,n);

printf(“n

二叉树叶子结点数 n0=%d”,n0);

printf(“n

度为1的结点数 n1=%d”,n1);

printf(“n

度为2的结点数 n2=%d”,n2);

printf(“nn

打回车键,继续。”);ch=getch();

} break;

case 9: exit(0);

} /* switch */

printf(“n----------------”);

}while(k>=1 && k

printf(“n

再见!”);

printf(“n

打回车键,返回。”);ch=getch();} /* main */

/* 利用二叉树性质5,借助一维数组V 建立二叉树 */ BiTNode *creat_bt1(){ BiTNode *t,*p,*v[20];int i,j;Etype e;

/* 输入结点的序号i、结点的数据e */

printf(“n 序号i,数据data=?”);scanf(“%d%d”,&i,&e);

while(i!=0 && e!=0)

/* 当 i ,e都为0时,结束循环

*/

{ p=(BiTNode *)malloc(sizeof(BiTNode));

p->data=e;p->lch=NULL;p->rch=NULL;

v[i]=p;

if(i==1)t=p;

/* 序号为1的结点是根 */

else{ j=i/2;

if(i%2==0)v[j]->lch=p;/* 序号为偶数,做左孩子*/

else

v[j]->rch=p;/* 序号为奇数,做右孩子*/

}

printf(“n i,data=?”);scanf(“%d%d”,&i,&e);

}

return(t);} /* creat_bt1 */ /* 模仿先序递归遍历方法,建立二叉树 */ BiTNode *creat_bt2()

{ BiTNode *t;

int e;

printf(“n data=”);scanf(“%d”,&e);

if(e==0)t=NULL;

/* 对于0值,不分配新结点 */

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

t->data=e;

t->lch=creat_bt2();/* 左孩子获得新指针值

*/

t->rch=creat_bt2();/* 右孩子获得新指针值

*/

}

return(t);

} /* creat_bt2 */ /* 前序递归遍历二叉树

*/ void preorder(BiTNode *p){ if(p){

printf(“%3d”,p->data);

preorder(p->lch);

preorder(p->rch);

} } /* preorder */ /* 中序递归遍历二叉树

*/ void inorder(BiTNode *p){ if(p){ inorder(p->lch);

printf(“%3d”,p->data);

inorder(p->rch);

} } /* inorder */ /* 后序递归遍历二叉树

*/ void postorder(BiTNode *p){ if(p){

postorder(p->lch);

postorder(p->rch);

printf(“%3d”,p->data);

} } /* posorder */ /* 利用前序递归遍历二叉树的方法,计算树中结点个数 */ void numb1(BiTNode *p){ if(p){

{ printf(“%3d”,p->data);

n++;

if(p->lch==NULL && p->rch==NULL)n0++;

if((p->lch==NULL && p->rch!=NULL)||

(p->lch!=NULL && p->rch==NULL))n1++;

if(p->lch!=NULL && p->rch!=NULL)n2++;

}

numb1(p->lch);

numb1(p->rch);

} } /* numb1 */

/* 利用中序递归遍历二叉树的方法,计算树中结点个数 */ void numb2(BiTNode *p){ if(p){ numb2(p->lch);

{ printf(“%3d”,p->data);

n++;

if(p->lch==NULL && p->rch==NULL)n0++;

if((p->lch==NULL && p->rch!=NULL)||

(p->lch!=NULL && p->rch==NULL))n1++;

if(p->lch!=NULL && p->rch!=NULL)n2++;

}

numb2(p->rch);

} } /* numb2 */

/* 利用后序递归遍历二叉树的方法,计算树中结点个数 */ void numb3(BiTNode *p){ if(p){ numb3(p->lch);

numb3(p->rch);

{ printf(“%3d”,p->data);

n++;

if(p->lch==NULL && p->rch==NULL)n0++;

if((p->lch==NULL && p->rch!=NULL)||

(p->lch!=NULL && p->rch==NULL))n1++;

if(p->lch!=NULL && p->rch!=NULL)n2++;

}

} } /* numb3 */

《二叉树的遍历.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
二叉树的遍历
点击下载文档
相关专题 二叉树及其遍历 遍历 二叉树 二叉树及其遍历 遍历 二叉树
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文