Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么局部变量会自动更改_C++_If Statement_Binary Search Tree - Fatal编程技术网

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;
}