我正在研究二叉搜索树,我通过了这段我无法理解的代码
//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/