簡體   English   中英

插入二叉搜索樹不起作用

[英]Insertion in a Binary search tree not working

我是編程新手,正嘗試插入二進制搜索樹程序中。我的代碼是:

struct Node* insert(struct Node* node, int key)
{
   if (node == NULL) return newNode(key);
   if (key < node->key)
    node->left  = insert(node->left, key);
   if (key > node->key)
    node->right = insert(node->right, key);
   return node;
}

但是它不能產生正確的輸出。 給出的解決方案是:

struct Node* insert(struct Node* node, int key)
{
    if (node == NULL) return newNode(key);
    if (key < node->key)
        node->left  = insert(node->left, key);
    else if (key > node->key)
        node->right = insert(node->right, key);
    return node;
}

else會影響插入?

首先,要擺脫此類問題,請始終自行運行代碼。

 struct Node* insert(struct Node* node, int key)
  {
    if (node == NULL) return newNode(key);
    if (key < node->key) // Stmt 1
     node->left  = insert(node->left, key);
    if (key > node->key) //Stmt 2
     node->right = insert(node->right, key);
    return node;
  }

在這里,您需要正確理解遞歸。 在您的代碼中,編譯器將同時使用stmt1和stmt2。

假設編譯器對左遞歸節點執行了stmt1的遞歸部分3次,那么它將對每個右節點每次執行stmt2 但是,如果您在stmt2使用else ,則您的代碼將不會為stmt2的遞歸部分執行stmt2。 如果使用else ,它將僅執行stmt1stmt2之一。

暫無
暫無

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

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