簡體   English   中英

二進制搜索樹

[英]Binary Search Tree

所以我用C編寫了一個二進制搜索樹,它的結構如下:

struct tnode {
    int content;
    struct tnode *left; /* left tree part */
    struct tnode *right; /* right tree part */
};

我的主要方法:

int main() {

    struct tnode *Baum = NULL;
    struct tnode *tmpPos = NULL;
    Baum = addelement (Baum, 32);
    Baum = addelement(Baum, 50);
    Baum = addelement(Baum, 60);
    tmpPos = searchnode(Baum,50);
}

因此,從根本上來說,這會創建一個具有3個元素(32,50,60)的Binary搜索樹。 我的searchnode方法應該將指針移到“ 50”,以便以后可以刪除它。 但是,如果我正在搜索的元素是我的二進制搜索樹的根,則我的searchnode方法僅返回指針。

searchnode:

struct tnode *searchnode(struct tnode *p, int nodtodelete) {
    if (p == NULL) {
        printf("Baum ist leer oder Element nicht vorhanden \n");
    }

    if ( p -> content == nodtodelete) {
        return p;
    }

    if (p->content > nodtodelete) {
        searchnode (p->right, p->content);
    }
    if (p->content < nodtodelete) {
        searchnode(p->left, p->content);
    }
}

也許你們可以幫我。

您應該傳遞要搜索的值,而不是節點的值:

searchnode (p->right, nodtodelete);
                      ^

對其他遞歸調用進行相同的更改。

searchnode(p->left, nodtodelete);

您的函數具有未定義的行為,因為在遞歸調用中沒有任何return語句。

同樣,遞歸調用需要固定以使用正確的輸入。

struct tnode *searchnode(struct tnode *p, int nodtodelete)
{
   if (p == NULL)
   {
      printf("Baum ist leer oder Element nicht vorhanden \n");
      return NULL;
   }

   if ( p -> content == nodtodelete)
   {
      return p;
   }

   // This is copied from OP's question but it seems suspect.
   // It should probably be:
   // if (p->content < nodtodelete)
   if (p->content > nodtodelete)
   {
      return searchnode (p->right, nodtodelete);
   }

   return searchnode(p->left, nodtodelete);
}

暫無
暫無

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

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