下面我有这三种不同的遍历方法,它遍历我的二叉搜索树。我知道后期订单和有序遍历都是从底部到根,但预订是从根到底。由于递归自下而上,为什么我们在preorder遍历中使用递归?我能找到的所有预订示例都使用递归。
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);
}
}
好吧,重点是我们打印树的节点。
后序:System.out.println
放置在所有递归调用之后,因此算法遍历所有节点直到结束,然后开始打印它们。
对于预订案例,打印当前节点,然后处理子树。
没有像“递归自下而上或自上而下”这样的规则。但是如果你在递归调用之前有一些代码,它将自上而下执行。如果在递归调用后有一些代码,它将自下而上执行。