为了遍历混乱

时间:2017-07-18 08:27:16

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

目前,我的二进制搜索树主代码如下所示:

public void add(int value) {
    overallRoot = add(overallRoot, value);
}
private IntTreeNode add(IntTreeNode root, int value) {
    if(root == null){
        root = new IntTreeNode(value);
    } else if (value <= root.data){
        root.left = add(root.left, value);
    } else {
        root.right = add(root.right, value);
    }
    return root;
}
public void print() {
    printInorder(overallRoot);
    System.out.println();
}

private void printInorder(IntTreeNode root) {
    if(root != null) {
        printInorder(root.left);
        System.out.print(root.data + " ");
        printInorder(root.right);
    }
}

按以下顺序插入值42,9,18,55,7,108,4,70,203,15, 我可以借助打印方式方法打印出如下图所示的树。

          203
      108
          70
   55
42
      18
           15
    9 
       7
           4

现在,当我调用tree.print(),应该在inorder遍历中打印时,它打印出4,7,9,15,18,42,55,70,108,203 但是当我手工进行顺序遍历时,我得到了4,7,15,9,18,42,55,70,108,203

我非常确定用手进行inorder遍历产生了正确的值 但为什么程序打印出不同的值?

1 个答案:

答案 0 :(得分:0)

你的tree.print()方法正确处理了indorder。打印方式方法的结果是不正确的。您确定按照给我们的顺序插入了数字吗?如果是这样,结果应该是

          -18
    -9        -42       
-7     -15         -55
     

-4 -108                            -70 -203

因此输出应为4,7,9,15,18,42,55,70,108,203