[英]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
,它將僅執行stmt1
或stmt2
之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.