从二叉搜索树

时间:2017-06-04 18:59:11

标签: java binary-search-tree

我正在尝试编写一个方法,可以通过给定的值从BST中删除节点,我需要它来返回此删除的值。我找到了各种递归实现的例子,但由于它们的性质,它们不能返回已删除的节点,而是返回根节点。这就是我现在拥有的东西

 public TreeNode remove(TreeNode node, int data) {
        if (null == node) {
            return null;
        }
        if (data < node.st.getkey()) {
            node.left = remove(node.left, data);
        } else if (data > node.st.getkey()) {
            node.right = remove(node.right, data);
        } else { // case for equality

            if (node.left != null && node.right != null) {
                TreeNode minInRightSubTree = min(node.right);

                copyData(node , minInRightSubTree);

                node.right = remove(node.right, minInRightSubTree.st.getkey());
            } else {
                if (node.left == null && node.right == null) {
                    node = null;
                } else {// one child case
                    TreeNode deleteNode = node;
                    node = (node.left != null) ? (node.left) : (node.right);
                    deleteNode = null;
                }
            }
        }
        return node;
    }

我可以提出一些黑客来让它返回已删除的节点,或者我应该查看迭代算法(如果是这样的话,我会非常感激,如果你能把我与链接挂钩)。

1 个答案:

答案 0 :(得分:1)

您不仅可以返回root,还可以返回一对root和已删除的节点(如果没有删除任何内容,则返回null)。 您可以使用Map.Entry或新类来存储2个字段(我建议使用新类,因为它更具描述性)。 因此,您可能的新签名将为public Map.Entry<TreeNode, TreeNode> remove(TreeNode node, int data)