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。它删除了我想要删除的节点,但也删除了它之后的所有内容。请帮忙。
答案 0 :(得分:0)
在执行delete this
之前,您需要将自己的左右指针归零。否则你的左右子树也会被删除(假设你已经正确编写了析构函数)。
如果可能,您需要考虑案例t == parent->data
;或者删除多余的t > parent->data
测试并使用else
。
当然不需要分配new Node()
。您将在下一行中分配变量。不要写这样的代码。
应该是:
Node *tempnode = right;
right->parent = this->parent;
right = nullptr;
// etc.