【发布时间】:2021-09-18 03:57:44
【问题描述】:
我目前正在尝试实现 BST,但在尝试实现删除功能时遇到了麻烦。当它试图删除的节点是根节点时,该函数会给出段错误。删除根节点以外的节点似乎不会导致此问题。有什么帮助吗?
bool bst::del(int num) { //return if successfully deleted a node
treenode *del_node = root;
treenode *par_node = NULL;
while (del_node) {
if (del_node->key == num) break;
par_node = del_node;
(del_node->key > num)?
del_node = del_node->lsub:
del_node = del_node->rsub;
}
//node not found
if (!del_node) return 0;
//2 children
if (del_node->lsub && del_node->rsub) {
//swap to deleting replacement
//replace = max in lsub || min in rsub
treenode *replace = del_node->lsub;
while (replace->rsub) {
par_node = replace;
replace = replace->rsub;
}
*del_node = *replace;
del_node = replace;
}
//0 child
if (!del_node->lsub && !del_node->rsub) {
(par_node->key > num)?
par_node->lsub = NULL:
par_node->rsub = NULL;
}
//1 child
else if (del_node->lsub) {
(par_node->key > num)?
par_node->lsub = del_node->lsub:
par_node->rsub = del_node->lsub;
} else {
(par_node->key > num)?
par_node->lsub = del_node->rsub:
par_node->rsub = del_node->rsub;
}
delete del_node;
return 1;
}```
【问题讨论】:
标签: c++ data-structures