// 先序遍历树
public void printTree(BinaryNode<AnyType> t) {
if (t != null) {
// 根节点
System.out.println(t.element);
// 左子树
printTree(t.left);
// 右子树
printTree(t.right); } }
在这个函数执行过程中,当把左子树遍历完后,遍历右子树的时候,t 为什么 一下就返回到根节点,而不是当前节点
望高手指教,谢谢。

解决方案 »

  1.   

    改成这样, 你就会发现它不是一下子返回根节点的, 而是一层一层向上返回的 public void printTree(BinaryNode<AnyType> t){
    if(t != null){
    // 根节点
    System.out.println(t.element);
    // 左子树
    printTree(t.left);
    // 右子树
    printTree(t.right);
    System.out.println(t.element+" : end");
    }
    }
      

  2.   

    你可以做一个简单的树,在纸上运行一下这个程序。多想想。很多东西只可意会不可言传
    在这个程序中,对于任何一个节点,都是先打印自己,再是左子树,最后右子树。              x     l_x                r_x
     L_l_x   R_l_x     L_r_x    R_r_x    
    如上的树,每次输出就是
    x
    l_x
    L_l_x
    R_l_x
    r_x
    L_r_x
    R_r_x
      

  3.   

    // 先序遍历树
    public void printTree(BinaryNode<AnyType> t) {
    if (t != null) {
    // 根节点
    System.out.println(t.element);
    // 左子树
    printTree(t.left);
    // 右子树
    printTree(t.right);}             6
             2        8
          1      4
    当把4遍历完时,为什么t一下子就变成了6