我正在尝试自己学习数据结构,并且我正在努力理解remove方法应该如何用于二进制搜索树。我正在关注数据结构和算法的例子 - Barnett& Del Tongo教科书:
我已经完成了大部分工作,但是我的代码的这一部分导致树不正确:
//Case 4
TreeNode largestValue = nodeToRemove.left;
while (largestValue.right != null) {
//Find the largest value in the left subtree of nodeToRemove
largestValue = largestValue.right;
}
TreeNode n = findParent(largestValue.getKey(), this.root);
n.right = null;
nodeToRemove.key = largestValue.getKey();
如果您可以帮我修复它或推荐一个更好的资源来帮助我正确构建这个方法,那就太棒了。
答案 0 :(得分:1)
嗯。案例4究竟是什么?
这些线似乎可能是罪魁祸首:
TreeNode n = findParent(largestValue.getKey(), this.root);
n.right = null;
如何确定n的正确方面必须设置为空?如果n与nodeToRemove相同怎么办?也就是说,左子树中的最大值是nodeToRemove节点。 left ?
也许您需要一个额外的案例来处理这个问题。