Java中BST的级别顺序遍历

时间:2015-01-21 19:23:42

标签: java binary-search-tree breadth-first-search

我试图在以下BST上进行关卡顺序遍历。

BST bst = new BST();
    int [] arr = {12, 15, 7, 3,  81, 9, 36, 23, 33, 41, 4};
    for (int i = 0; i <arr.length; i++) {
        bst.add(arr[i]);
    }

这是我的代码。

public static void levelOrderTraversal(Node root){
        if(root == null) return;
        Queue<Node> queue = new ArrayDeque<Node>();
        queue.add(root);
        while(!queue.isEmpty()){
            Node current = queue.peek();
            System.out.print(current.getData() + " ");
            if (current.left != null)
                queue.add(current.left);
            if (current.right != null){
                queue.add(current.right);
            }
            queue.poll();
        }
    }

我得到的输出是

12 7 15 3 9 81 4 36 23 41 33 

这显然不是正确的BFS。我哪里错了。

2 个答案:

答案 0 :(得分:2)

您的遍历功能正确无误。您可以查看此在线工具

https://www.cs.usfca.edu/~galles/visualization/BST.html

它还提供了插入,删除和查找过程的可视化。这是结果树:

enter image description here

答案 1 :(得分:1)

我不明白为什么,鉴于您提供的元素列表,树将如下所示:

12
 |- 7 (L)
    |- 3 (L)
        |- 4 (R)
    |- 9 (R)
 |- 15 (R)
    |- 81 (R)
        |- 36 (L)
            |- 23 (L)
                |- 33 (R)
            |- 41 (R)

或更好的视觉效果:

    12
   /  \
  7    15
 / \     \
3   9     81
 \       /
  4    36
      /  \
    23    41
      \
       33

请注意,这不是平衡二进制搜索树。 BST将首先创建一个节点12(您提供的第一个元素)。 12仍然是根。所有小于的元素都被排序(并开始增长自己的根等)。