0

我正在从包含一些整数的输入文件中读取整数并尝试创建二叉树。我无法弄清楚为什么它一直在 (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); }
    }
}
4

2 回答 2

3

您的代码有一些问题。

首先也是最重要的主要问题是您没有返回您在 create_leaf 函数中创建的叶子。

其次,请不要强制转换 malloc,它是不必要的,并且可以掩盖问题。

第三请检查malloc的返回码。尽管即使 malloc 指示在过度使用系统上成功,也不能保证您的内存可用,但如果您获得 NULL,那肯定会很糟糕。

于 2012-12-16T09:26:51.853 回答
1

当您重新分配linadd_leaf()时,新值l不会在函数返回时传播给调用者。

你有两个选择:

  • 您可以将其作为双指针传递leaf** l,并相应地更改您的代码。
  • 你可以从函数return中获取新的。l
于 2012-12-16T09:20:56.860 回答