Java 从二叉搜索树返回已删除的节点

Java 从二叉搜索树返回已删除的节点,java,binary-search-tree,Java,Binary Search Tree,我正在尝试编写一个方法,该方法将按给定的值从BST中删除节点,我需要它返回这个已删除的值。我找到了各种各样的递归实现示例,但由于它们的性质,它们不能返回已删除的节点,而是返回根节点。这是我现在拥有的 public TreeNode remove(TreeNode node, int data) { if (null == node) { return null; } if (data < node.st.getkey

我正在尝试编写一个方法,该方法将按给定的值从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;
    }
public树节点删除(树节点,int数据){
if(null==节点){
返回null;
}
if(数据node.st.getkey()){
node.right=删除(node.right,数据);
}else{//平等的理由
if(node.left!=null&&node.right!=null){
TreeNode minInRightSubTree=min(节点右侧);
copyData(节点,minInRightSubTree);
node.right=remove(node.right,minInRightSubTree.st.getkey());
}否则{
if(node.left==null&&node.right==null){
node=null;
}else{//一个孩子的案例
TreeNode deleteNode=节点;
node=(node.left!=null)?(node.left):(node.right);
deleteNode=null;
}
}
}
返回节点;
}

我可以想出一些技巧让它返回删除的节点吗?或者我应该研究迭代算法吗(如果是这样的话,如果你能给我链接,我会非常感激)。

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

我刚刚想出了一个主意,声明一个辅助公共节点,它将保存lastRemovedNode。