如何找到给定节点BST的后继者

时间:2018-10-04 13:57:11

标签: java methods binary-search-tree inorder

我正在尝试通过递归调用以下内容来构建算法,以找到节点的后继者:

 public static BTreeNode inorderFirst(BTree T) {

    BTreeNode n = T.getRoot();
    if (n == null)
        return null;
    while (n.getLeftChild() != null)
        n = n.getLeftChild();
    return n;

}

并称呼

public static BTreeNode inorderNext(BTreeNode n) {

    //returns successor. if it finds one.

    // TODO

    // if node has a right child get its left descendant.

     // otherwise get the first ancestor of which in the left sub-tree the node n is.

     // if it didn't find
    return null;

} // inorderNext()

我正在使用具有用于获取getLeftChild()的方法的自定义导入,等等也有getParent(),这很难弄清楚。如果有人对如何开始构建它有任何想法。我添加了一些关于自己计划的评论。我只是不知道如何开始执行。我想要这种结构,因为它使测试方法更容易。 我想出了一种无需使用递归即可使其工作的方法:

   public static BTreeNode inorderNext(BTreeNode n) {


   if (n.getRightChild() != null) {
    BTreeNode temp = n.getRightChild();
    while (temp.getLeftChild() != null)
        temp = temp.getLeftChild();
    return temp;
   }

   else {
    BTreeNode temp = n;
    BTreeNode par = n.getParent();
    while (par != null) {
        if (par.getLeftChild() == temp)
        return par;
        else {
        temp = par;
        par = par.getParent();
        }
    }

    }

    return null;

} // inorderNext()

但是我仍然想知道是否有一种方法可以在此函数上递归使用第一个函数。

1 个答案:

答案 0 :(得分:0)

您的代码将类似于以下内容:

if(n.getLeftChild() != null)
        inorderNext(n.getLeftChild());
    System.out.print(n.data);
    if(n.getRightChild() != null)
        inorderNext(n.getRightChild());