读书人

关于简单的二叉数的有关问题.

发布时间: 2012-03-19 22:03:05 作者: rapoo

关于简单的二叉数的问题..
#include <stdio.h>
#include <stdlib.h>
typedef struct btnode //二叉树的二叉链表存储结构.........
{
char data ;
struct btnode *lchild,*rchild ;

} *bitree ;

char createbitree(bitree t) //先序遍历生成二叉树..........
{
char temp ;

t=(bitree )malloc(sizeof(bitree));
if(t==NULL)
return 0;
printf( "请输入一个字母: ");
scanf( "%c ",&t-> data);
temp=getchar(); //结束回车...........
if(t-> data!= ' ')
{

createbitree(t-> lchild) ;//构造左子树...........
createbitree(t-> rchild) ;//构造右子树.........
}
return 1;

}


char PrintElem(char e) //打印元素 ........
{
printf( "%c ",e);
return 1;


}

char preordretraverse(bitree t,char (* visit)(char e) ) //先序遍历二叉树
{
if(t) //二叉树不为空时
{
visit(t-> data); //访问根结点
preordretraverse(t-> lchild,visit); // 先序遍历左子树
preordretraverse(t-> rchild,visit); //先序遍历右子树


}
return 1;
}

char main()
{
bitree t;
char (* visit)(char );
visit=PrintElem ;
createbitree(t);
preordretraverse(t,visit);
return 1;

}


/*

/////////////////////////////////////////////////////////////////////////////////////
输入一个元素: A
输入一个元素: B
输入一个元素: C
输入一个元素:
输入一个元素:
输入一个元素: D
输入一个元素: E
输入一个元素:
输入一个元素: G
输入一个元素:
输入一个元素:
输入一个元素: F
输入一个元素:
输入一个元素:
输入一个元素:


结果因为:A B C D E G F


////////////////////////////////////////////////////////////////////////////////////////////

*/


///编译没有错。..但输出时出现了问题..请大哥们帮帮忙....谢谢了。..




[解决办法]
帮你修改了一下,你试试吧
........

char createbitree(bitree *t) //先序遍历生成二叉树..........
{
char temp ;

*t=(bitree )malloc(sizeof(bitree));
if(*t==NULL)
return 0;
printf( "请输入一个字母: ");
scanf( "%c ",&(*t)-> data);
temp=getchar(); //结束回车...........
if((*t)-> data!= ' ')
{

createbitree(&(*(t)-> lchild)) ;//构造左子树...........
createbitree(&(*(t)-> rchild)) ;//构造右子树.........
}
return 1;

}

.............

char main()
{
bitree t;
char (* visit)(char);
visit=PrintElem ;
createbitree(&t);
preordretraverse(t,visit);
system( "pause ");


return 1;

}



[解决办法]
在 Michael_555(Nothing 的基础上修改
char createbitree(bitree *t) //先序遍历生成二叉树..........
{
char temp ;

*t=(bitree )malloc(sizeof(btnode)); //这里修改了
if(*t==NULL)
return 0;
printf( "请输入一个字母: ");
scanf( "%c ",&(*t)-> data);
temp=getchar(); //结束回车...........
if((*t)-> data!= ' ')
{

createbitree(&((*t)-> lchild)) ;//构造左子树...........
createbitree(&((*t)-> rchild)) ;//构造右子树.........
}
else //防止前序递归遍历访问野指针
{
(*t)-> lchild = NULL;
(*t)-> rchild = NULL;
}
return 1;

}

读书人网 >C语言

热点推荐