返回首页
当前位置: 主页 > 网络编程 > .Net实例教程 >

二叉树的建立与显示 实现代码

时间:2013-06-12 00:00来源:知行网www.zhixing123.cn 编辑:麦田守望者

#include "stdio.h"
#include "stdlib.h"
#define Maxsize 100;
typedef int ElemType;
typedef struct BT
{
ElemType data;
struct BT *lch,*rch;
}BT;
BT *CreatBT();
void preorder(BT *T);
void inorder(BT *T);
void postorder(BT *T);
void leafnum(BT *T);
void ShowTree(BT *T);
void Nodenum(BT *T);
void main()
{
BT *T=NULL;
int choice;
do{
printf("\n");
printf(" 二叉树 \n");
printf(" ***************************\n");
printf(" * *\n");
printf(" * 主菜单 *\n");
printf(" * 1 建立二叉树 *\n");
printf(" * 2 先序遍历二叉树 *\n");
printf(" * 3 中序遍历二叉树 *\n");
printf(" * 4 后序遍历二叉树 *\n");
printf(" * 5 二叉树的叶子结点数 *\n");
printf(" * 6 显示二叉树 *\n");
printf(" * 7 二叉树的所有结点数 *\n");
printf(" * 8 退出程序运行 *\n");
printf(" ****************************\n");
printf(" 请输入您的选择(1,2,3,4,5,6,7,8): \n");
scanf("%d",&choice);
if(choice==1)
{
printf("二叉树的建立,以输入“0”表示结束:!\n");
printf("请输入根结点:\n");
T=CreatBT();
printf("二叉树成功建立");
}
else if(choice==2)
{
printf("先序遍历二叉树 :\n");
preorder(T);
}
else if(choice==3)
{
printf("中序遍历二叉树:\n");
inorder(T);
}
else if(choice==4)
{
printf("后序遍历二叉树 :\n ");
postorder(T);
}
else if(choice==5)
{
printf(" 二叉树的叶子结点数为 : \n");
leafnum(T);
}
else if(choice==6)
ShowTree(T);
else if(choice==7)
{
int count=0;Nodenum(T);
printf("该二叉树总共有%d个结点。\n",count);
}
else if(choice==8)
exit(0);
}while(choice<=8);
}/*main end*/
BT *CreatBT() //建立二叉树
{
BT *t;
int x;
scanf("%d",&x);
//getchar();
if(x==0)
{
t=NULL;
}
else
{
t=(BT*)malloc(sizeof(BT));
t->data=x;
printf("\n请输入%d结点的左子结点:",t->data );
t->lch=CreatBT();
printf("\n请输入%d结点的右子结点:",t->data );
t->rch=CreatBT();
}
return t;
}
void preorder(BT *T)
{
if(T==NULL) return;
else
{
printf("%3d",T->data);
preorder(T->lch);
preorder(T->rch);
}
}
void inorder(BT *T)
{
if(T==NULL) return;
else
{
inorder(T->lch);
printf("%3d",T->data);
inorder(T->rch);
}
}
void postorder(BT *T)
{
if(T==NULL) return;
else
{
postorder(T->lch);
postorder(T->rch);
printf("%3d",T->data);
}
}
void leafnum(BT *T)
{
int count=0;
if(T)
{
if(T->lch==NULL&&T->rch==NULL)
count++;
leafnum(T->lch);
leafnum(T->rch);
}
printf("%d",count);
}
void ShowTree(BT *T) //显示二叉树
{
BT *stack[100];
BT*p;
int level[100][2];
int top,n,i;
int width=4;
if(T!=NULL)
{
printf("\n二叉树的表示法f:\n");
top=1;
stack[top]=T;
level[top][0]=width;
while(top>0)
{
p=stack[top];
n=level[top][0];
for(i=1;i<=n;i++)
printf(" ");
printf("%d",p->data);
for(i=n+1;i<60;i+=2)
printf("*");
printf("\n\t\t");
top--;
if(p->rch!=NULL)
{
top++;
stack[top]=p->rch ;
level[top][0]=n+width;
level[top][1]=2;
}
if(p->lch!=NULL)
{
top++;
stack[top]=p->lch ;
level[top][0]=n+width;
level[top][1]=1;
}
}
}
}
void Nodenum(BT *T)
{
int count=0;
if(T) count++;
Nodenum(T->lch);
Nodenum(T->rch);
}

顶一下
(0)
0%
踩一下
(0)
0%
标签(Tag):C# C#实例教程 c#基础教程 C#源代码 c#技巧
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片