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

二叉树有关问题 望高手 解惑!

2014-01-22 
二叉树问题望高手 解惑!!!初始化 应该没什么问题就是创建一个有20个节点的树,但是遍历时候 第一次遍历 数

二叉树问题 望高手 解惑!!!
初始化 应该没什么问题  就是创建一个有20个节点的树,但是遍历时候 第一次遍历 数据不对,之后 就死断错误:( Program received signal SIGSEGV, Segmentation fault.
0x0804850e in per (t=0xec830000) at er.c:35
35printf("%d  ",t->data);  )
这是为什么阿?


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


typedef struct node *tree;
struct node {
int data;
tree l,r;
};

tree inittree(tree t,int n)
{
//static int num=0;
if(n>=20){
   puts("bianjiedaole");
return;
}

t = (struct node *)malloc(sizeof(struct node));
t->r=t->l=NULL;
if(t!=NULL) {
t->data = n;
//printf("%d \n",t->data);
//num++;
inittree(t->l,2*n+1);
puts("lllll");
inittree(t->r,2*n+2);
puts("rrrrr");
}
}
void per(tree t)
{
if(t){
puts("hhhhhh");
printf("%d  ",t->data);
per(t->l);
puts("sssss");
per(t->r);
}else return;
}
int main(void)
{
int i=0;
tree root;

inittree(root,0);
puts("pppppp");
per(root);
return 0;
}

[解决办法]


tree inittree(tree t,int n)
{
//static int num=0;
if(n>=20){
   puts("bianjiedaole");
return;
}

t = (struct node *)malloc(sizeof(struct node));
t->r=t->l=NULL;
if(t!=NULL) {
t->data = n;
// printf("%d \n",t->data);
// num++;
inittree(t->l,2*n+1);
puts("lllll");
inittree(t->r,2*n+2);
puts("rrrrr");
}
}

创建函数有问题啊。参数传的是指针的值,但是你又需要修改指针的值,所以你需要传指针的指针进去。

热点排行