删除二进制搜索树无法正常工作的功能

时间:2016-11-16 04:07:07

标签: c++ binary-search-tree

else if (left == NULL) {
    Node *tempNode = new Node();
    tempNode = right;
    tempNode = right;
    tempNode->parent = parent;
    if (t < parent->data) parent->left = tempNode;
    if (t > parent->data) parent->right = tempNode;
    delete this;
    }

这是我的代码,用于在父项只有一个子项时删除二进制搜索树的fcn。它删除了我想要删除的节点,但也删除了它之后的所有内容。请帮忙。

1 个答案:

答案 0 :(得分:0)

在执行delete this之前,您需要将自己的左右指针归零。否则你的左右子树也会被删除(假设你已经正确编写了析构函数)。

如果可能,您需要考虑案例t == parent->data;或者删除多余的t > parent->data测试并使用else

当然不需要分配new Node()。您将在下一行中分配变量。不要写这样的代码。

应该是:

Node *tempnode = right;
right->parent = this->parent;
right = nullptr;
// etc.