首页 > 解决方案 > 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 来检查是否存在另一个节点。

谢谢你的帮助!!

标签: javatreebinary-search-treered-black-tree

解决方案


推荐阅读