为什么在预遍历(二进制搜索树)上使用递归?

时间:2018-09-26 09:36:24

标签: java binary-tree binary-search-tree tree-traversal

我下面有这3种不同的遍历方法,它们遍历我的二进制搜索树。我知道后序遍历和有序遍历都是从底部到根,但是预排序是从根到底部。由于递归是自下而上的,为什么我们在递归遍历中使用递归?我可以找到的所有预订示例都使用递归。

private void preOrder(BinaryNode<AnyType> t )
    {
        if(isEmpty()){
            System.out.println("Empty");
        }
        if(t != null) {
            System.out.println(t.element);
            preOrder(t.left);
            preOrder(t.right);
        }
    }

    private void postOrder(BinaryNode<AnyType> t){

        if(isEmpty()){
            System.out.println("Empty");
        }
        if (t != null) {
            postOrder(t.left);
            postOrder(t.right);
            System.out.println(t.element);
        }
    }

    private void inOrder(BinaryNode<AnyType> t)
    {
        if(isEmpty()){
            System.out.println("Empty");
        }

        if (t != null) {
            inOrder(t.left);
            System.out.println(t.element);
            inOrder(t.right);
        }
    }

1 个答案:

答案 0 :(得分:0)

好吧,当我们打印树的节点时,关键是

后置顺序:System.out.println放在所有递归调用之后 ,因此算法遍历所有节点,直到结束为止,之后开始打印它们。

>

对于预订购情况,将打印当前节点,然后处理子树。


没有诸如“递归自下而上或自上而下”之类的规则。但是,如果您在递归调用之前 有一些代码,它将自上而下执行。如果在递归调用后有一些代码,它将自下而上执行。