簡體   English   中英

在二叉搜索樹中插入節點(C)

[英]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.

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