C++ 为什么局部变量会自动更改
我写了一个函数来删除二叉搜索树中的一个节点。 这是我的密码C++ 为什么局部变量会自动更改,c++,if-statement,binary-search-tree,C++,If Statement,Binary Search Tree,我写了一个函数来删除二叉搜索树中的一个节点。 这是我的密码 #include <iostream> struct BSTNode { int data; BSTNode *left; BSTNode *right; }; BSTNode * GetNode(int data); BSTNode * FindMin(BSTNode *root); BSTNode * Insert(BSTNode *root, int data); void PreOrder(
#include <iostream>
struct BSTNode
{
int data;
BSTNode *left;
BSTNode *right;
};
BSTNode * GetNode(int data);
BSTNode * FindMin(BSTNode *root);
BSTNode * Insert(BSTNode *root, int data);
void PreOrder(BSTNode *root);
BSTNode * DeleteNode(BSTNode *root,int data);
BSTNode * GetNode(int data)
{
BSTNode *newNode = new BSTNode;
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
BSTNode * FindMin(BSTNode *root)
{
if(root == NULL)
return root;
while(root->left != NULL)
root = root->left;
return root;
}
BSTNode * Insert(BSTNode *root, int data)
{
if(root == NULL)
{
root = GetNode(data);
return root;
}
else if (data <= root->data)
root->left = Insert(root->left, data);
else if (data > root->data)
root->right = Insert(root->right, data);
return root;
}
void PreOrder(BSTNode *root)
{
if(root == NULL)
return;
std::cout << root->data << std::endl;
PreOrder(root->left);
PreOrder(root->right);
}
BSTNode * DeleteNode(BSTNode *root,int data)
{
if(root == NULL)
return root;
else if(data < root->data)
root->left = DeleteNode(root->left, data);
else if(data > root->data)
root->right = DeleteNode(root->right, data);
else // Found the Node
{
// case 1: No child
if(root->left == NULL && root->right == NULL)
{
delete root;
root = NULL;
return root;
}
// case 2: One child
else if(root->left == NULL)
{
BSTNode * temp = root;
root = root->right;
delete temp;
return root;
}
else if(root->right = NULL)
{
BSTNode * temp = root;
root = root->left;
delete temp;
return root;
}
else // case 3: two child
{
BSTNode * temp = FindMin(root->right);
root->data = temp->data;
root->right = DeleteNode(root->right, temp->data);
}
}
}
int main()
{
BSTNode *root = NULL;
root = Insert(root, 15);
root = Insert(root, 10);
root = Insert(root, 20);
root = Insert(root, 25);
root = Insert(root, 8);
root = Insert(root, 12);
root = DeleteNode(root, 15);
PreOrder(root);
return 0;
}
当程序到达else语句时,root->right自动变为NULL
为什么会这样?我怎样才能修好它
任何想法都值得赞赏 在您的代码中,您在检查以下代码时犯了一些打字错误
else if(root->right = NULL)
{
BSTNode * temp = root;
root = root->left;
delete temp;
return root;
}
上面的else-ifroot->right=NULL行应该是root->right==NULL,但是您写的是root->right=NULL。else-ifroot->right=NULL oops。DeleteNode也不总是返回某些内容。打开编译器警告!我太粗心了!非常感谢。
else if(root->right = NULL)
{
BSTNode * temp = root;
root = root->left;
delete temp;
return root;
}