使用java在BST中递归给定元素的顺序后继元素

使用java在BST中递归给定元素的顺序后继元素,java,recursion,binary-search-tree,inorder,Java,Recursion,Binary Search Tree,Inorder,因为代码太长,链接在这里-> 因为我不太擅长递归,所以找不到适合这个问题的递归函数。 (另外,我是这个论坛的新手,我知道我会有很多讨厌的评论,比如为什么不去找递归教程和其他东西,但相信我,我已经做了所有事情,但我就是不理解递归的逻辑) 我的问题是,在二元搜索树中,给定元素的顺序后继者的递归函数是什么?我做了这么多,但它只返回它应该打印的节点的父节点: public E getSuccessor(BNode<E> t, E x) { if(t.left!=null &&

因为代码太长,链接在这里-> 因为我不太擅长递归,所以找不到适合这个问题的递归函数。
(另外,我是这个论坛的新手,我知道我会有很多讨厌的评论,比如为什么不去找递归教程和其他东西,但相信我,我已经做了所有事情,但我就是不理解递归的逻辑)
我的问题是,在二元搜索树中,给定元素的顺序后继者的递归函数是什么?
我做了这么多,但它只返回它应该打印的节点的父节点:

public E getSuccessor(BNode<E> t, E x) {
    if(t.left!=null && x.equals(t.info)){
        return t.left.info;
    }
    else if(x.compareTo(t.info)<0){
        return (getSuccessor(t.left, x));
    }
    else {
        return (getSuccessor(t.right, x));
    }
}

public E getSuccessor(E x) {
    return getSuccessor(root, x);
}
public E getsuccession(BNode t,ex){
如果(t.left!=null&&x.equals(t.info)){
返回t.left.info;
}

否则,如果(x.compareTo(t.info)给定节点的顺序后继节点是该节点右子树中的最低节点。否则,将在树的简单顺序遍历中打印下一个节点

  • 如果节点具有正确的子节点,则此解决方案简化为在正确的子树中查找最小的节点
  • 如果节点没有正确的子节点,并且没有父指针,那么我们需要从树的根开始,以我们的方式确定这个后续节点
  • 下面是解决这个问题的递归方法。调用该方法时,将root作为树的根传递,后续节点需要为t,null作为后续节点,因为该方法将计算它-

    BinaryTreeNode successor=tree.inorderSuccessor(根,节点,null)

    ordersuccessor中的公共二进制树节点(二进制树节点根、二进制树节点t、二进制树节点后继者)
    {
    if(root==null)
    返回null;
    if(root.element==t.element)
    {
    if(root.right!=null)
    返回findMin(root.right);
    其他的
    返还继承人;
    }
    int cmp=t.element.compareTo(root.element);
    if(cmp<0)
    在OrderSuccessor中返回(root.left,t,root);
    其他的
    在OrderSuccessor中返回(root.right,t,successor);
    }
    公共二进制树节点findMin(二进制树节点t)
    {
    如果(t==null)
    返回t;
    while(t.left!=null)
    t=t左;
    返回t;
    }
    
    您可以指定您的问题并在原始问题中发布相关代码吗?对不起,我编辑了我的帖子,所以现在应该更具体。但问题是我不应该只使用父节点从根节点开始,然后使用递归查找该元素的后继节点,这正是程序所做的-它只使用根节点。它不假设使用父指针。在整个程序过程中,我们识别一个节点并将其称为父节点。这与使用父指针非常不同。事实上,让我重命名所有内容以避免混淆。Tyvm作为我现在得到的解释。
    public BinaryTreeNode<Type> inorderSuccessor(BinaryTreeNode<Type> root,BinaryTreeNode<Type> t,BinaryTreeNode<Type> successor)
    {
        if(root==null)
            return null;
        if(root.element==t.element)
        {
            if(root.right!=null)
                return findMin(root.right);
            else
                return successor;
        }
        int cmp=t.element.compareTo(root.element);
    
        if(cmp < 0)
            return inorderSuccessor(root.left,t,root);
        else
            return inorderSuccessor(root.right,t,successor);
    }
    
    public BinaryTreeNode<Type> findMin(BinaryTreeNode<Type> t)
    {
        if(t==null)
            return t;
        while(t.left!=null)
            t=t.left;
        return t;
    }