[英]Why am I getting Segmentation fault in my code?
Node* findMax(Node* root){
Node* m=root;
while(m!=NULL && m->right!=NULL){
m=m->right;
}
return m;
}
// Returns the root of the modified BST after deleting the node with value X
Node *deleteNode(Node *root, int X)
{
Node *temp;
if(!root)return NULL;
else if(X<root->data)root->left=deleteNode(root->left,X);
else if(X>root->data)root->right=deleteNode(root->right,X);
else if(X==root->data){
//data found
if(root->left && root->right){//internal node to be deleted
temp=findMax(root->left);//inorder predecessor
root->data=temp->data;//replace by inorder predecessor
root->left=deleteNode(root->left,root->data);//delete the duplicate left in left subtree
}
else{//node to be deleted is either leaf or has one child
temp=root;
if(root->left==NULL){
root=root->right;
}
if(root->right==NULL){
root=root->left;
}
free(temp);
}
}
return root;
}
我找不到這段代碼有什么問題:為什么會引發分段錯誤?
在這部分
if(root->left==NULL){
root=root->right;
}
if(root->right==NULL){
root=root->left;
}
當root->left == NULL
為真時, root=root->right;
被執行。
由於前面if
語句的條件, root->right
在這里是NULL
然后root
設置為NULL
。
然后,評估root->right==NULL
並取消引用root
( NULL
)。 這將導致分段錯誤。
為了解決這個問題,當root->left!=NULL
時,第二個條件總是為真,所以它應該被替換為else
並讓它只執行其中一個。
if(root->left==NULL){
root=root->right;
}
else{
root=root->left;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.