我试图编写一个函数,将一个值插入到二叉树中。到目前为止我已经知道了:
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;
}但每次我运行它,它就停止工作。因此,我认为我的插入函数一定有问题。有什么想法吗?
发布于 2015-02-19 10:31:38
据我所知,有两个问题:
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;
}https://stackoverflow.com/questions/28603763
复制相似问题