c语言创建二叉树从小到大_用C语言编写二叉树的建立与遍历

本文介绍如何使用C语言创建两种不同方法的二叉树,并提供了中序遍历二叉树的实现。此外,还包含了计算二叉树结点个数及其各类结点数的函数。
摘要由CSDN通过智能技术生成

朋友,如果你觉得我的回答能令你满意,能否将你的一百分给我,我现在急需这一百分啊。

/* 二叉树的建立与遍历 */

# include

# include

typedef int Etype;

typedef struct BiTNode /* 树结点结构 */

{ Etype data;

struct BiTNode *lch,*rch;

}BiTNode;

/* 函数原形声明 */

BiTNode *creat_bt1();

BiTNode *creat_bt2()

void inorder(BiTNode *p);

void numb(BiTNode *p);

BiTNode *t; int n,n0,n1,n2,;

/* 主函数 */

main()

{ char ch; int k;

do { printf("\n\n\n");

printf("\n\n 1。

建立二叉树方法1 ");

printf("\n\n 2。 建立二叉树方法2");

printf("\n\n 3。 中序递归遍历二叉树");

printf("\n\n 4。

计算树中结点个数");

printf("\n\n 5。 结束程序运行");

printf("\n======================================");

printf("\n 请输入您的选择 (1,2,3,4,5,6)"); scanf("%d",&k);

switch(k)

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

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

case 3: { inorder(t); /* 调用中序遍历 */

printf("\n\n 打回车键,继续。

“); ch=getch();

} break;

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

numb(t);

printf(“\n 二叉树结点总数 n=%d”,n);

printf(“\n 二叉树叶子结点数 n0=%d”,n0);

printf(“\n 度为1的结点数 n1=%d”,n1);

printf(“\n 度为2的结点数 n2=%d”,n2);

printf("\n\n 打回车键,继续。

“); ch=getch();

} break;

case 5: exit(0);

} /* switch */

printf("\n ----------------");

}while(k>=1 && kdata=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;

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 inorder(BiTNode *p)

{ if (p) { inorder(p->lch);

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

inorder(p->rch);

}

} /* inorder */

/* 利用中序递归遍历二叉树的方法,计算树中结点个数 */

/* 读者可以试着运用先序或后序递归遍历二叉树方法重新编写这一段函数 */

void inorder(BiTNode *p)

{ if (p) { inorder(p->lch);

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

n++;

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

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

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

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

} /* 把访问的功能扩大了 */

inorder(p->rch);

}

} /* inorder */。

全部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值