C++ 在二叉搜索树C+中删除+;(树不会更新)和堆损坏

C++ 在二叉搜索树C+中删除+;(树不会更新)和堆损坏,c++,heap,binary-search-tree,C++,Heap,Binary Search Tree,我正在尝试为二叉树编写节点删除。以下是我的节点和树结构: class node{ public: int value; node* left; node* right; ~node(); }; class tree{ public: node* root; .... }; 这就是我写的函数: void tree::del(node** r, int x){ if(*r) { if((*r)->value==x) {

我正在尝试为二叉树编写节点删除。以下是我的节点和树结构:

class node{
public:
    int value;
    node* left;
    node* right;
    ~node();
};

class tree{
public:
    node* root;
    ....
};
这就是我写的函数:

void tree::del(node** r, int x){
if(*r)
{
    if((*r)->value==x)
    {
        if(!(*r)->left)
            *r= (*r)->right;
        else if(!(*r)->right)
            *r= (*r)->left;
        else 
        {
            int k= delMax((*r)->left);
            (*r)->value= k;
        }
    }
    else if((*r)->value > x)
    {
        node* k= (*r)->left;
        del(&k, x);
    }
    else
    {
        node* k= (*r)->right;
        del(&k, x);
    }
}}
我的问题是,一旦我到达所需的元素,指针就会改变,但是当递归地重建树时,它会返回到原来的状态,并且不会删除任何元素。我以为将指针传递给指针可以解决这个问题,但事实并非如此
delMax
从树中删除最大元素,并且该元素可以自己正常工作

另外,在最后两个类的析构函数中,我应该如何放置删除?因为如果我把删除放对了;删除左侧;在
~node()
~tree()中删除root()
中,我得到一个错误,即我正在破坏堆


谢谢

通过使局部变量
k
并传递地址,通过
*r
的赋值会影响局部变量,而不是树中的任何指针


另外,编写
node*&r
可能会为您节省一些
&
*
s.

您可能想阅读以下内容:感谢链接,但我想知道我的代码有什么问题,因为从逻辑上讲,它可以工作,但它甚至不会删除一个叶,而不是因为它找不到它,但是因为它递归地重建了树,你能把你的delMax代码放进去吗?