gpt4 book ai didi

c++ - 二叉搜索树删除(Inorder Pred 方法)C++

转载 作者:太空宇宙 更新时间:2023-11-04 12:28:55 27 4
gpt4 key购买 nike

好吧,我以为它是固定的,但我得到的结果完全不一致。我从头开始重写它以重新开始,这是我的结果。我没有收到任何错误,也没有崩溃,只是没有删除它们。它完全弄乱了树,给了我更多的叶子,把所有东西都弄混了。不知道还能去哪里

template <class T>
void BST<T>::remove(struct Node<T>*& root, const T& x)
{
Node<T>* ptr = root;
bool found = false;
Node<T>* parent;


while (ptr != NULL && !found)
{
if (x < ptr->data)
{
parent = ptr;
ptr = ptr->left;
}
else if (x > ptr->data)
{
parent = ptr;
ptr = ptr->right;
}
else
found = true;
}

if (found == false)
return;
else
{
if(ptr->left != NULL && ptr->right != NULL)
{
Node<T>* inOrderPtr = ptr->left;
parent = ptr;
while (inOrderPtr->right != NULL)
{
parent = inOrderPtr;
inOrderPtr = inOrderPtr->right;
}

ptr->data = inOrderPtr->data;
ptr = inOrderPtr;
}
Node<T>* subPtr = ptr->left;
if (subPtr == NULL)
subPtr = ptr->right;

else if (parent->left == ptr)
parent->left = subPtr;

else
parent->right = subPtr;

delete ptr;
}

最佳答案

实际发生的情况是,搜索可能会被逆转,因此它实际上会继续正确进行,但数据并没有真正正确匹配,因此它似乎会撞墙。

if (root->data < x)
remove(root->left, x);
else
remove(root->right, x);

应该是

if(x < root->data)
remove(root->left, x);
else
remove(root->right, x);

关于c++ - 二叉搜索树删除(Inorder Pred 方法)C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/245838/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com