错误:使用迭代方法向BST插入更多元素时出现分割错误



我正在尝试使用c编程以迭代方法实现BST。只插入一个元素不会导致分割错误(主函数中的第二行root=insert(root,50(。但是在BST中添加多个元素会显示分割错误。我不知道哪里出了错。代码如下:

#include <stdio.h>
#include <stdlib.h>
struct bstnode
{
int data;
struct bstnode *left;
struct bstnode *right;
};

struct bstnode* getnode(int data)
{

struct bstnode *temp = malloc(sizeof(struct bstnode));
if(temp == NULL)
{
printf("failed");
}
temp->data = data;
temp->left = temp->right = NULL;
return temp;
}
struct bstnode* insert(struct bstnode *root,int data)
{
if(root == NULL)
{
root = getnode(data);
return root;
}

struct bstnode *temp = root;
struct bstnode *parent;
int flag;
while(temp != NULL)
{
parent = temp; 
if(data < temp->data)
{
temp = temp->left;
flag = 1;
}
if(data > temp->data)
{
temp = temp->right;
flag = 0;
}
}

if(flag == 1)
{
parent->left = getnode(data);
}
else
parent->right = getnode(data);

return root; 

}
void inorder(struct bstnode* root)
{
if (root != NULL) {
inorder(root->left);
printf("%d n", root->data);
inorder(root->right);
}
}
int main() {
struct bstnode *root = NULL;
root = insert(root, 50);
insert(root, 30);
insert(root, 20);
insert(root, 40);
insert(root, 70);
insert(root, 60);
insert(root, 80);

inorder(root);

return 0;
}

想想当data小于temp->data并且temp->leftNULL时会发生什么?

if(data < temp->data)
{
temp = temp->left;
flag = 1;
}
if(data > temp->data)
{
temp = temp->right;
flag = 0;
}

在这种情况下,您可能希望执行else if而不是仅执行if

如果data等于temp->data,会发生什么?

相关内容

最新更新