我正在尝试编写一个将值插入二叉树的函数。到目前为止我得到了这个:
struct node
{
int data;
struct node* left;
struct node* right;
};
struct node* newNode(int data)
{
struct node* node = (struct node*)
malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
// Insert
struct node* insert (struct node* node, int data)
{
if (node == NULL)
node->data=data;
else
{
if (data < node->data)
node->left = insert(node->left, data);
else
node->right = insert(node->right ,data);
}
node->left = NULL;
node->right = NULL;
return node;
}
但每次我跑它,它就会停止工作。因此我认为插入功能一定有问题。有什么想法吗?
答案 0 :(得分:1)
据我所知,有两个问题:
struct node* insert (struct node* node, int data)
{
if (node == NULL)
node->data=data; // 1: Dereferencing a null pointer is a bad idea.
else
{
if (data < node->data)
node->left = insert(node->left, data);
else
node->right = insert(node->right ,data);
}
// 2: Throwing away the subtrees is also a bad idea.
node->left = NULL;
node->right = NULL;
return node;
}
您应该使用newNode
在树中创建节点,并保留子树:
struct node* insert (struct node* node, int data)
{
if (node == NULL)
node = newNode(data);
else
{
if (data < node->data)
node->left = insert(node->left, data);
else
node->right = insert(node->right ,data);
}
return node;
}