如何从Binary Search Tree C ++正确删除节点

时间:2019-07-20 04:12:08

标签: c++ binary-search-tree

我一直在尝试从树中删除特定值,但没有将其删除,而是将其设置为0。与网络上的其他二进制搜索树相比,我的实现似乎很标准。我的所有其他功能都可以正常工作,除了我的RemoveNode。

struct Node{
    int key;
    Node *right;
    Node *left;
    Node(int data){
        key=data;
        right=NULL;
        left=NULL;
    }
};
class BST{
private:
    Node *root;

    void AddLeafPrivate(int key,Node *&Ptr){
        if(Ptr==NULL){
            Ptr=createLeaf(key);
        }else if(key<Ptr->key){
            if(Ptr->left!=NULL){
                AddLeafPrivate(key,Ptr->left);
            }else
            {
                Ptr->left=createLeaf(key);
            }
        }
        else if(key>Ptr->key){
            if(Ptr->right!=NULL){
                AddLeafPrivate(key,Ptr->right);
            }else
            {
                Ptr->right=createLeaf(key);
            }
        }
    }
    void PrintInOrderPrivate(Node *Ptr){
    if(Ptr!=NULL){
        if(Ptr->left!=NULL){
            PrintInOrderPrivate(Ptr->left);
        }cout<<Ptr->key<<" ";
        if(Ptr->right!=NULL){
            PrintInOrderPrivate(Ptr->right);
        }

    }else{
        cout<<"tree is empty"<<endl;
    }
    }

    Node *findMin(Node *Ptr){
        if(Ptr->left!=NULL){
            findMin(Ptr->left);
        }else{
            return Ptr;
        }

    }

    void RemoveNodePrivate(int key,Node *parent){
        if(parent==NULL){
            cout<<"EMPTY TREE"<<endl;
            return;
    }else if(key<parent->key){
        RemoveNodePrivate(key,parent->left);
    }else if(key>parent->key){
        RemoveNodePrivate(key,parent->right);
    }else{
        if(parent->left==NULL&&parent->right==NULL){
            delete parent;
            parent=NULL;
        }else if(parent->left!=NULL&&parent->right==NULL){
            Node *temp=parent;
            parent=parent->left;
            delete temp;
            temp=NULL;

        }else if(parent->left==NULL&&parent->right!=NULL){
            Node *temp=parent;
            parent=parent->right;
            delete temp;
            temp=NULL;

        }else if(parent->left!=NULL&&parent->right!=NULL){
            Node *temp=findMin(root->right);
            root->key=temp->key;
            RemoveNodePrivate(temp->key,root->right);

        }
    }


    }

public:
    BST(){
        root=NULL;
    }


    Node *createLeaf(int key){
        Node *n=new Node(key);
        return n;
    }
    void AddLeaf(int key){
        AddLeafPrivate(key,root);
    }

    void PrintInOrder(){
        PrintInOrderPrivate(root);
    }

    void RemoveNode(int key){
        RemoveNodePrivate(key,root);
    }
};

int main()
{
BST tree;
tree.AddLeaf(5);
tree.AddLeaf(8);
tree.AddLeaf(12);
tree.AddLeaf(4);
tree.AddLeaf(3);
tree.AddLeaf(2);
tree.AddLeaf(7);
tree.RemoveNode(5);
tree.PrintInOrder();
cout<<endl;

}

我希望输出是2 3 4 7 8 12,但是它是2 3 4 7 0 8 12

0 个答案:

没有答案