当我使用顺序遍历进行打印时,如何按升序打印序列

时间:2018-10-21 09:48:17

标签: java

这是我的任务

  

通过插入序列[2 7 9 4 1 5 3 6 0 8]运行程序,然后再次以升序打印出序列

      import java.util.*;
class TestBinary {
    public static void main(String [] args) {
        BinarySearch tree = new BinarySearch();

        tree.root = new BinaryNode(1);
        tree.root.left = new BinaryNode(4);
        tree.root.right = new BinaryNode(5);

        tree.root.left.left = new BinaryNode(7);
        tree.root.left.left.left = new BinaryNode(2);
        tree.root.left.left.right = new BinaryNode(9);


        tree.root.right.right = new BinaryNode(6);
        tree.root.right.right.left = new BinaryNode(3);

        tree.root.right.right.right= new BinaryNode(8);
        tree.root.right.right.right.left = new BinaryNode(0);

        System.out.println("This is in-order traversal:");
        tree.inorder();
    }
}

结果是:
这是预订遍历:
2794153608
我想按升序再次打印出来,该怎么办?

1 个答案:

答案 0 :(得分:1)

2 7 9 4 1 5 3 6 0 8

如果您按该顺序插入一棵树,则应该期望这棵树

                    2
                   / \
                  1    7
                 /    / \
                0    4   9
                    / \   /
                   3   5 8
                       \
                        6

请注意,对于任何给定节点,所有左元素都小于该元素,然后,所有右节点都大于该元素。如果您构建了足够多的树,您还将注意到该属性将始终为true,这就是为什么按顺序遍历应始终输出升序的原因

问题是您的主要方法,不一定是树类。插入数据时,您必须对树进行迭代并比较元素,而不仅仅是选择要选择哪个节点的位置,还需要手动分配字段。

正确插入节点后,顺序遍历将自然以升序打印数据

例如

BinarySearch tree = new BinarySearch();

int i = 0;
tree.root = new BinaryNode(data[i++]);
while(i < data.length) {
    tree.add(tree.root, data[i++]);
}
tree.inOrder();