java - RedBlackTree 使用插入方法删除 (StackOverFlowError)
问题描述
在测试我的以下方法时,我以某种方式得到了 StackOverFlowError。测试和辅助函数是 100% 正确的。我正在尝试使用我已经实现(并且有效)的插入方法为 BinarySearchTree 实现删除方法。
这是我的代码:
public void delete(TreeNode toDelete) {
TreeNode _rootTmp = _root;
RedBlackTree tree = new RedBlackTree();
if(_root == null) {
tree.insert(_root);
}
if(_rootTmp.left != _nil) {
if(!_rootTmp.left.equals(toDelete)) {
tree.insert(_rootTmp.left);
}
delete(_rootTmp.left);
}
if(_rootTmp.right != _nil) {
if(!_rootTmp.right.equals(toDelete)) {
tree.insert(_rootTmp.right);
}
delete(_rootTmp.right);
}
if(_rootTmp.left == _nil && _rootTmp.right == _nil) {
_root = tree._root;
}
}
在我们的 RedBlackTree 类中,我们使用 _nil 而不是 null 来检查是否存在另一个节点。
谢谢你的帮助!!
解决方案
推荐阅读
- sql-server - Docker 中的 ASP.NET Core 3.0 : Seeding DB 在舞台上间歇性挂起,但从未在 dev 中挂起
- rust - 如何在 Rust 的测试中模拟时间
- extjs - Sencha ExtReact 嵌套对话框无法访问
- javascript - MongoDB - 使用聚合管道评论赞成/反对
- android - FragmentContainerView 和 app:navGraph - 此导航图未引用任何布局文件
- reactjs - 如何在反应组件中访问商店实例
- python - 在满足条件的范围内求和
- sql - 为什么 ISNULL(NULL, NULL) 返回 int 数据类型?
- c# - 处理 ffmpeg m4s 上的输入到 mp4 传输时发现无效数据
- swift - 如何为一个视图控制器 Swift macOS 覆盖复制和粘贴 NSMenuItems