【发布时间】:2014-05-28 15:59:24
【问题描述】:
这个函数一切正常,但问题是我无法删除根,我无法弄清楚这里的错误是什么。我已经追踪了“其他部分”它工作正常,直到返回,它返回我不知道为什么的旧值。请帮忙!
node *removeNode(node *Root, int key) {
node *tmp = new node;
if(key > Root->value)
Root->right = removeNode(Root->right,key);
else if(key < Root->value)
Root->left = removeNode(Root->left, key);
else if(Root->left != NULL && Root->right != NULL) {
node *minNode = findNode(Root->right);
Root->value = minNode->value;
Root->right = removeNode(Root->right,Root->value);
}
else {
tmp = Root;
if(Root->left == NULL)
Root = Root->right;
else if(Root->right == NULL)
Root = Root->left;
delete tmp;
}
return Root;
}
【问题讨论】:
-
我可以说的第一件事是:如果左右为空怎么办?
-
它进入else,然后它需要任何条件,不是吗?
-
是的,它只是模棱两可(Root 等于 Root->就在返回之前)。我在您的代码中没有看到任何错误。您在调试会话期间打印了什么?
-
如果我只插入“40”,然后尝试删除它,它不会被删除
-
哦,谢谢这个修复它!
标签: c data-structures binary-search-tree