【问题标题】:Inorder traversal confusion中序遍历混淆
【发布时间】:2017-07-18 08:27:16
【问题描述】:

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

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 的值, 借助 print side way 方法,我可以打印出如下所示的树。

          203
      108
          70
   55
42
      18
           15
    9 
       7
           4

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

我很确定手动进行中序遍历会产生正确的值 但是为什么程序会打印出不同的值呢?

【问题讨论】:

  • 您打印左侧节点中的所有内容,然后是数据,然后是右侧节点中的所有内容。如果你有一个正确构造的二叉树,除了按升序打印所有数据值外,它什么也做不了。也就是说,您手动操作不正确。
  • 谢谢,我刚刚意识到我 15 是在 18 的左侧分支而不是在 7 的右侧分支;;;
  • 是的,它只能分支到9 的右侧或18 的左侧,否则树本身会不正确。
  • @jose 你能请完整的课程文件吗?我猜问题出在添加新节点的 add 方法中?

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


【解决方案1】:

您手工构建错误的树。 15 应该放在 18 的左叶,而不是 15 的右叶。

                    42  
           9               55
      7         18               108  
   4          15              70     203

【讨论】:

    猜你喜欢
    • 2014-09-26
    • 2020-04-18
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    相关资源
    最近更新 更多