这是我用来在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);
}
功能添加具有未定义的行为。
对于初学者,root最初可以等于NULL。因此,您可能不使用此方法
struct node* current=root;
//...
while(current->left!=NULL && current->right!=NULL){
第二个循环
while(current->left!=NULL && current->right!=NULL){
parent=current;
不处理仅包含一个不等于NULL的子节点的节点。
而且您也不会在创建的节点温度的左侧和右侧设置为NULL数据成员。
因此函数定义无效。