我正在从输入文件中读取整数,该文件包含一些整数并尝试创建二叉树。我无法弄清楚为什么它会一直进入(l == NULL)。它应该第二次向左或向右,具体取决于读取值是否大于根值。 感谢任何帮助。谢谢!
leaf* create_leaf(int i)
{
leaf* l = (leaf*)malloc(sizeof(leaf));
l->left = NULL;
l->right = NULL;
l->data = i;
}
leaf* l=NULL;
while(fscanf(input,"%d",&i) != EOF)
{
add_leaf(l,i);
}
void add_leaf(leaf* l, int i)
{
if(l == NULL)
{
printf("adding root\n");
l = create_leaf(i);
}
else if(i <= l->data)
{
if(l->left == NULL)
{
l->left = create_leaf(i);}
else {
add_leaf(l->left,i); }
}
else
{
if(l->right == NULL)
{
l->right = create_leaf(i); }
else {
add_leaf(l->right,i); }
}
}
答案 0 :(得分:3)
您的代码存在一些问题。
首要的主要问题是你没有在create_leaf函数中返回你正在创建的叶子。
其次,请不要施放malloc,这是不必要的,可以掩盖问题。
请检查malloc的返回码。虽然即使malloc在过度使用系统上显示成功,也无法保证您的内存可用,但如果获得NULL,肯定会很糟糕。
答案 1 :(得分:1)
当您在l
中重新分配add_leaf()
时,l
的新值在函数返回时不会传播给调用者。
您有两种选择:
leaf** l
传递,并相应地更改您的代码。return
来自该功能的新l
。