【发布时间】:2020-02-20 17:47:36
【问题描述】:
这是我用来在 BST 中添加的代码。这是预购函数。为什么它会进入无穷大?我从用户那里获取关于要添加的元素的输入。但是输出进入无穷大.
void add(){
struct node* temp=(struct node *) malloc(sizeof(struct node));
struct node* current=root;
printf("\nEnter the data:\n");
scanf("%d",&temp->data);
while(current->left!=NULL && current->right!=NULL){
parent=current;
if(temp->data > parent->data){
current=current->right;
}
else{
current=current->left;
}
}
if(temp->data > parent->data){
parent->right=temp;
parent->left=NULL;
}
else{
parent->left=temp;
parent->right=temp;
}
}
void preorder(struct node* node)
{
if (node == NULL)
return;
/* first print data of node */
printf("%d ", node->data);
/* then recur on left subtree */
preorder(node->left);
/* now recur on right subtree */
preorder(node->right);
}
【问题讨论】:
-
是时候学习如何使用调试器逐句执行程序了。对于这类问题,快速调试会话应该能够帮助快速找出问题。
-
@Abhiraj Kale 函数 add 具有未定义的行为,因为最初 root 可以等于 NULL。
-
在
add函数的某一时刻,它设置parent->left和parent->right指向同一个节点。这看起来不对。 -
temp->left和temp->right永远不会初始化为NULL,因此它们将包含无效指针。
标签: c data-structures struct binary-search-tree preorder