永发信息网

二叉树的建立及基本操作

答案:2  悬赏:50  手机版
解决时间 2021-04-06 21:36
二叉树的建立及基本操作
最佳答案
楼主你好
具体代码如下:
#include
#include
#define MAX 40

typedef struct node//二叉树结点定义
{
char data;
struct node *lChild;//左孩子
struct node *rChild;//右孩子
}BTNode;

//*************************************二叉树操作***************************************

void Initial_BT(BTNode * &b)
{
b=NULL;
}

void Creat_BT(BTNode * &b)//创建二叉树
{
BTNode *St[MAX];//用栈辅助实现二叉树的建立
BTNode *p=NULL;
b=NULL;
int top=-1;//栈指针
int k;//k为左右孩子标示(1为左孩子、2为右孩子)
char ch;
printf("Enter the binary tree:\n");
ch=getchar();
while(ch!='\n')
{
switch(ch)
{
case '('://左孩子
top++;
St[top]=p;
k=1;
break;
case ')':
top--;
break;
case ','://右孩子
k=2;
break;
default:
p=(BTNode *)malloc(sizeof(BTNode));
p->data=ch;
p->lChild=p->rChild=NULL;
if(!b)//如果为根节点
b=p;
else
{
switch(k)
{
case 1:
St[top]->lChild=p;
break;
case 2:
St[top]->rChild=p;
break;
}
}
}
ch=getchar();//继续读入数据
}
}

void InOrder(BTNode *b)//中序遍历
{
if(b)
{
InOrder(b->lChild);
printf("%c",b->data);
InOrder(b->rChild);
}
}

void PostOrder(BTNode *b)//后序遍历
{
if(b)
{
PostOrder(b->lChild);
PostOrder(b->rChild);
printf("%c",b->data);
}
}

int Leaf_Sum(BTNode *b)
{
if(!b)
return 0;
else if(b->lChild == NULL && b->rChild == NULL)
return 1;
else
return Leaf_Sum(b->lChild)+Leaf_Sum(b->rChild);
}

void Start()
{
BTNode *b;//二叉树
char choice;
b=(BTNode *)malloc(sizeof(BTNode));
Initial_BT(b);

GOTO:system("cls");
printf("\t\t1.创建二叉树.\n"
"\t\t2.中序遍历.\n"
"\t\t3.后序遍历.\n"
"\t\t4.叶子结点个数.\n"
"\t\t5.退出.\n");
printf("输入你的选择:");
GOTO1:choice=getchar();

switch(choice)
{
case '1':
getchar();
Creat_BT(b);
system("pause");
goto GOTO;
case '2':
InOrder(b);
printf("\n");
system("pause");
getchar();
goto GOTO;
case '3':
PostOrder(b);
printf("\n");
system("pause");
getchar();
goto GOTO;
case '4':
printf("共有%d个叶子结点\n",Leaf_Sum(b));
system("pause");
getchar();
goto GOTO;
case '5':
system("pause");
break;
default:
printf("输入错误!\n"
"重新输入:");
goto GOTO1;
}
}

int main()
{
Start();
return 0;
}

希望能帮助你哈
全部回答
#include
#include
typedef char DataType;
typedef struct BTNode
{
DataType data;
struct BTNode * lchild;
struct BTNode * rchild;
}BTNode,*BiTree;
void CreateBiTree(BiTree *T)
{
DataType ch;
scanf("%c",&ch);
if(ch=='#')
*T=NULL;
else
{
*T=(BiTree)malloc(sizeof(BTNode));
if(!(*T))
exit(-1);
(*T)->data=ch;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
}
void preorder(BTNode *bt)
{
if(bt==NULL)
return;
else
{
printf("%c",bt->data);
preorder(bt->lchild);
preorder(bt->rchild);
}
}
void inorder(BTNode *bt)
{
if(bt==NULL)
return;
else
{
inorder(bt->lchild);
printf("%c",bt->data);
inorder(bt->rchild);
}
}
void postorder(BTNode *bt)
{
if(bt==NULL)
return;
else
{
postorder(bt->lchild);
postorder(bt->rchild);
printf("%c",bt->data);
}
}
void mian()
{
BiTree *T=NULL;
CreateBiTree(T);
printf("先序遍历结果为:");
preorder(*T);
printf("中序遍历结果为:");
inorder(*T);
printf("后序遍历结果为:");
postorder(*T);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
呼吸臻白亮肤美白淡斑补水保湿礼盒中2ml的那
汽车仪表出现systempress是什么意思
好句子摘抄并赏析,西行漫记的句子摘抄加赏析
gtv好消息幸福学堂婚前性行为
实验室常见的几种气体发生装置如图A、B、C所
掇刀区荆门诚信粮油批发地址在什么地方,想今
大通冠通汽车服务有限公司怎么去啊,有知道地
大路错对门可做铺面吗
LV GUCCI包包超A的和A的有什么区别吗?
打印预览没文字,打印出来有文字是怎么回事
讽刺不懂感恩的句子,怎样含蓄的骂不知感恩的
1000米算不算长跑
自从用了无线路由器后经常断网,现在不用也断
下列叙述中,符合历史事实的是A.历史上首先正
中国最有分量的申遗材料是什么:科举制度
推荐资讯
车价39400元购置税多少钱
从南昌火车站坐什么车可以去象山公园?
《陆游筑书巢》中“乃引客就观之”的“就”是
怎样可以消除掉因长时间用鼠标而使手磨出来的
惠东十里银滩买房的自住的多不多
新开淘宝网店如何推广,在淘宝开网店如何做市
黄山玉的介绍
魔兽世界朵丹尼尔服务器
仿写乡下孩子诗句,乡下小镇门面适合做什么生
怎么把两个flash文件的内容合在一起
单选题小明惟一的亲人姥姥去世了,他痛不欲生
一手房地产销售上班时间能带手机吗?打电话吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?