[英]Inserting nodes in a binary search tree (C)
我正在嘗試編寫一個函數來將節點插入二叉搜索樹,我有以下內容:
typedef struct Node {
int key;
struct Node *left;
struct Node *right;
} Node;
Node *createNode(int key)
{
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->key = key;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
Node *insert(Node *node, int key)
{
if (node==NULL)
{
node = createNode(key);
}
else
{
if (node->key > key)
{
node->left = insert(node->left, key);
}
else
{
node->right = insert(node->right, key);
}
}
return node;
}
int main(int argc, char* argv[])
{
Node *root = NULL;
root = insert(root, 10);
return 0;
}
我知道這有效,如果我想在根節點root
的樹中插入5,我可以寫root = insert(root, 5);
。 我的問題是,如何編寫另一個版本的insert
,只需insert(root, 5);
即可實現相同的功能insert(root, 5);
? 我試過以下但沒有用。
void insert(Node *node, int key)
{
if (node==NULL)
{
node = createNode(key);
}
else
{
if (node->key > key)
{
insert(node->left, key);
}
else
{
insert(node->right, key);
}
}
}
這有什么問題,為什么這不起作用? 任何指針(沒有雙關語)將不勝感激!
對我來說,你的第一個解決方案是優雅。
現在,如果要在不利用返回值的情況下插入,那么可以使用指向指針的方法。
就像是:
void insert(Node ** node, int key)
{
if (*node == NULL)
*node = createNode(key);
else if ((*node)->key > key)
insert(&(*node)->left, key);
else
insert(&(*node)->right, key);
}
電話會是
insert(&root, 10);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.