永发信息网

二叉树的建立及基本操作

答案:2  悬赏:50  手机版
解决时间 2021-04-06 21:36
  • 提问者网友:战魂
  • 2021-04-06 04:14
二叉树的建立及基本操作
最佳答案
  • 五星知识达人网友:人间朝暮
  • 2021-04-06 05:52
楼主你好
具体代码如下:
#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;
}

希望能帮助你哈
全部回答
  • 1楼网友:话散在刀尖上
  • 2021-04-06 07:02
#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);
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯