我正在研究二进制搜索树,并且遇到了无法理解的这段代码
// 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/