簡體   English   中英

二叉樹插入根

[英]Binary tree inserting root

我正在從具有一些整數的輸入文件中讀取整數,並嘗試創建一個二叉樹。 我無法弄清楚為什么它總是一直(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); }
    }
}

您的代碼有幾個問題。

首先,最主要的問題是您不返回在create_leaf函數中創建的葉子。

其次,請不要強制轉換malloc,這是不必要的,並且可以掩蓋問題。

第三,請檢查malloc的返回碼。 盡管即使malloc指示在過量使用的系統上成功,也不能保證您的內存可用,但是如果得到NULL,那肯定是不好的。

當在add_leaf()重新分配l時,函數返回時l的新值不會傳播到調用方。

您有兩種選擇:

  • 您可以將其作為雙指針leaf** l傳遞,並相應地更改代碼。
  • 您可以從函數中return新的l

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM