首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于二叉树创建与遍历的有关问题

2013-01-05 
关于二叉树创建与遍历的问题想请问各路高手,我创建了一个二叉树输入字符的时候没有问题,但是当输入完成后

关于二叉树创建与遍历的问题
想请问各路高手,我创建了一个二叉树输入字符的时候没有问题,但是当输入完成后要进行先序,中序,后序遍历时都在报错,请问我的算法有什么地方需要改进的麻烦指出~~~本人虚心请教


关于二叉树创建与遍历的有关问题

不过程序这样设计输入很麻烦,而且输入字符不是用scanf(%c)的格式,而用%s
觉得在一行完成输入好一点, 如12#4##3 5 ###


[解决办法]
幫你調好了关于二叉树创建与遍历的有关问题
主要是下面的問題:
Linklist Create_btree()
{
Linklist L;
char n[16];                                 //這裡最好弄個大點的字符數組
printf("请输入一个值,输入#为结束:\n");
scanf("%s",n);                             //因爲你這裡輸入過多字符,可能發生越界。


//L=(Linklist)malloc(sizeof(Btree));       //這行不需要,否則輸入#時 内存瀉漏。

還有ls提到的 printf("%s",L->data); // 这里是%c,


#include <stdio.h>
#include <stdlib.h>

typedef struct Btree
{
char data;
struct Btree *lchild,*rchild;
}Btree,*Linklist;

Linklist Create_btree()
{
Linklist L;
char n[16];
printf("请输入一个值,输入#为结束:\n");
scanf("%s",n);
//L=(Linklist)malloc(sizeof(Btree));
if(n[0]=='#')
{L=NULL;}
else
{
if(!(L=(Linklist)malloc(sizeof(Btree))))
exit(0);
L->data=n[0];
L->lchild=Create_btree();
L->rchild=Create_btree();
}
return L;
}

void Preorder(Linklist L)
{
if(L==NULL)return;
printf("%c",L->data);
Preorder(L->lchild);
Preorder(L->rchild);
}

void Inorder(Linklist L)
{
if(L==NULL)return;
Inorder(L->lchild);
printf("%c",L->data);
Inorder(L->rchild);
}

void Laorder(Linklist L)
{
if(L==NULL)return;
Laorder(L->lchild);
Laorder(L->rchild);
printf("%c",L->data);
}

int main(void)
{
int x;
Linklist L;
L=(Linklist)malloc(sizeof(Btree));
do{
printf("1...建立二叉树\n");
printf("2...先序遍历\n");
printf("3...中序遍历\n");
printf("4...后序遍历\n");
printf("0...结束\n");
scanf("%d",&x);
switch(x){
case 1:
L=Create_btree();
    break;
case 2:
Preorder(L);
    printf("\n");
    break;
case 3:
Inorder(L);
    printf("\n");
    break;
case 4:
Laorder(L);
    printf("\n");
break;
default :
printf("The End\n");
    break;
}
}while(x!=0 && x<=4);

return 0;
}

[解决办法]
int main(void)
{
    int x;
    Linklist L;
    //L=(Linklist)malloc(sizeof(Btree)); //這行也是不需要的

热点排行