【发布时间】:2014-04-19 04:21:35
【问题描述】:
我已经用 C++ 实现了一个二叉搜索树。
对于 delete 方法,除了最后一种情况,当唯一的树是父树并且它指向两个空子树时,一切都可以正常工作。
现在的问题是:
我希望在删除子树后打印出父级的左右子树等于什么。他们和父母都应该是NULL,但是当我尝试输出这些值时,我得到一个STATUS_ACCESS _VIOLATION。
这里是有问题的删除代码。
我想删除父节点,并设置tree->left = tree->right = NULL.
void BST_delete(string key, BST & tree) {
if ((!BST_has(key, tree) || BST_isEmpty(tree))) {
return;
} else if (tree->key == key) {
if (tree->right == NULL && tree->left == NULL) {
tree = NULL; // <-- THIS IS IN QUESTION
} else if (tree->left == NULL) {
...
} ....
}
主要:
int main() {
BST bst;
BST_init(bst);
BST_insert("a",bst);
BST_print(bst);
cout << endl;
BST_delete("a",bst);
BST_print(bst); // <-- doesnt print anything (which is right)
cout << bst->right; //<-- Gives me error
return 0;
}
【问题讨论】:
-
您是否尝试过使用调试器?
-
OT:您应该考虑以 BST 成员的身份实现这些功能。
-
@wonce,实际上,目前正在纠正,至少如果我的一些证据使我得出正确的结论的话。
-
我不明白你MAIN,你在BST_delete(
bst = NULL)中删除了bst,你为什么还要bst->right?