我正在编写一个函数来在 BST 中插入一个节点,但是分段错误。
/*
Node is defined as
typedef struct node
{
int data;
node * left;
node * right;
}node;
*/
node * findPos(node * tree, int value){
if(tree -> data > value){
return findPos(tree -> left, value);
}
else if (tree -> data < value){
return findPos(tree -> right, value);
}
return tree;
}
node * addNode(int value){
struct node * temp =(struct node *)malloc(sizeof(struct node));
temp->data = value;
temp->left = NULL;
temp -> right = NULL;
return temp;
}
node * insert(node * root, int value)
{
node * ptr = root;
if(ptr == NULL)
return addNode(value);
else if(ptr -> data > value){
ptr->left = findPos(ptr -> left, value);
}
else if(ptr -> data < value){
ptr->right = findPos(ptr -> right, value);
}
return root;
}
我无法理解我正在尝试访问哪个非法内存,这会导致此错误。 请帮我解决一下这个。 在此先感谢:)
答案 0 :(得分:0)
这里有两个问题:
insert不应递归调用findPos。相反,它应该递归调用插入。像这样的东西(尚未测试过):
node * insert(node * root, int value)
{
node * ptr = root;
if(ptr == NULL)
return addNode(value);
else if(ptr -> data > value) {
return insert(ptr -> left, value);
} else if(ptr -> data < value) {
return insert(ptr -> right, value);
} else
return root;
}
答案 1 :(得分:0)
谢谢你的帮助!!! 让程序正常工作
node * addNode(int value){
struct node * temp =(struct node *)malloc(sizeof(struct node));
temp->data = value;
temp->left = NULL;
temp -> right = NULL;
return temp;
}
node * insert(node * root, int value)
{
node * ptr = root;
if(ptr == NULL)
return addNode(value);
else if(ptr -> data > value){
ptr->left = insert(ptr -> left, value);
}
else if(ptr -> data < value){
ptr->right = insert(ptr -> right, value);
}
return root;
}
* /
module.exports = {
server: server,
logger: logger
};