有人可以向我解释一下递归在顺序遍历中是如何工作的。这是我的 inOrder() 方法。
public void inOrder(BinaryNode p){
if(p.left!=null){
inOrder(p.left);
}
visit(p);
if(p.right!=null){
inOrder(p.right);
}
}
public void visit(BinaryNode p){
System.out.println(p.element);
}
BinaryTree t=new BinaryTree();
t.insert(5);
t.insert(t.root,4);
t.insert(t.root,6);
t.insert(t.root,60);
t.insert(t.root,25);
t.insert(t.root,10);
t.inOrder(t.root);
inOrder() 方法可以正确打印元素,但我不明白它是如何工作的。
当我打电话时,t.inOrder(t.root);
因为 root 的值为 5 它会类似于inOrder(5);
并且有一个左节点所以if(p.left!=null){
inOrder(p.left);
}
将被执行。那里的递归调用将是inOrder(4);
因为 4 的左边指向 null,然后visit(4)
是执行打印值 4 的行。
但之后如何打印 5。虽然起初当方法被t.inOrder(t.root);
局部变量调用时p 被赋值为 5 的 BinaryNode,现在 p 为 4。然后在打印出 4 之后,可以执行的下一行是
if(p.right!=null){
inOrder(p.right);
}
但是由于 p.right 现在引用 BinaryNode 中元素 4 的 right 并且 4 的 right 为空,所以这也不会被执行。
那么递归是如何维护的呢?
它如何打印出 5 和其余节点?