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代码放进去吗?