二进制树排序,同时输入元素

时间:2017-07-07 01:09:45

标签: java sorting binary-tree

我是新手学习java。 我想制作二元树,对元素进行排序

我使用了这段代码

private void setNode (Node Value, Node head){

    if (head == null || Value.Value == head.Value)
        return;

        if (Value.Value > head.Value) {
            if (head.Right == null) {
                head.Right = Value;
                return;
            } else
                setNode(Value, head.Right);
        }

    if (Value.Value < head.Value){
        if(head.Left == null){
            head.Left = Value;
            return;}
        else
            setNode(Value, head.Left);
    }

}

但如果我像这样使用它

for (int i=0 ; i < array.length ; i++)
        link.addNode(new Node(i));

BinaryLinkList a = new BinaryLinkList(link);
    a.Search(700);

它会在700次尝试后找到它 因为每次输入的数字都比前一个大 它会像这样

0

0.1

.. 2

... 3

... 4

..... 5

.......

........

......... 700&lt;&lt;

...........

............ 1000

我希望它在逐个输入元素而不是数组时进行排序 有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

Binary Tree的一般概念的最坏情况是按排序顺序插入元素。然后,您将完全体验到您刚刚告诉我们的内容,所有元素都将放在一边,并且您没有从树概念获得任何优势(深度是元素的数量)。

对于可能已经排序的输入排序,您应该使用除Binary Tree之外的其他数据结构,有许多概念具有不同的优点和缺点。

还有一个优化,您可以在一段时间后平衡树。正如@Kevin Anderson所提到的,你可以看看self balancing binary trees。此外,标准Java库的实现也是自我平衡(TreeSet at JavaAPI)。也许你也在寻找PriorityQueuePriorityQueue at JavaAPI)。还有多个关于如何实现这样一个队列的概念(例如BucketQueue),同样有优点和缺点。

您的用户案例是什么?如果您告诉我们您想用它实现什么,我们可以帮助您找到合适的数据结构。