我正在研究二进制搜索树,并且遇到了无法理解的这段代码

// head是根节点,num是关键元素

void generate(struct node **head, int num)
{
    struct node *temp = *head, *prev = *head;
    if (*head == NULL)
    {
        *head = (struct node *)malloc(sizeof(struct node));
        (*head)->a = num;
        (*head)->left = (*head)->right = NULL;
    }
    else
    {
        while (temp != NULL)
        {
            if (num > temp->a)
            {
                prev = temp;
                temp = temp->right;
            }
            else
            {
                prev = temp;
                temp = temp->left;
            }
        }
        temp = (struct node *)malloc(sizeof(struct node));
        temp->a = num;


//我无法理解以下几行

        if (num >= prev->a)
        {
            prev->right = temp;
        }
        else
        {
            prev->left = temp;
        }
    }

}

最佳答案

在二叉搜索树中,左子级具有比父级更低的值,右子级具有比父级更高的值。然后,如果要插入新节点,则必须找到他的站点。当树的节点的值小于您的num时,您可以在树的右侧导航。当一个节点的值大于num时,将树导航到左侧,而不是右侧。这是循环,直到您到达NULL节点为止,该节点将成为新节点的值num的位置。

关于c - 无法理解在二进制搜索树中插入的逻辑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29878207/

10-11 04:29