【问题标题】:Returning deleted node from binary search tree从二叉搜索树返回已删除的节点
【发布时间】:2017-06-04 18:59:10
【问题描述】:

我正在尝试编写一个通过给定值从 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;
    }

我能想出一些技巧让它返回已删除的节点,还是我应该研究迭代算法(如果是这样,如果你能给我提供链接,我将不胜感激)。

【问题讨论】:

    标签: java binary-search-tree


    【解决方案1】:

    您不仅可以返回根,还可以返回一对根和已删除的节点(如果没有删除任何内容,则返回 null)。 您可以使用 Map.Entry 或新类来存储 2 个字段(我会推荐新类,因为它更具描述性)。 所以你可能的新签名是public Map.Entry&lt;TreeNode, TreeNode&gt; remove(TreeNode node, int data)

    【讨论】:

    • 我刚刚提出了声明一个辅助公共节点来保存 lastRemovedNode 的想法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多