我是新手学习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
我希望它在逐个输入元素而不是数组时进行排序 有什么帮助吗?
答案 0 :(得分:1)
Binary Tree
的一般概念的最坏情况是按排序顺序插入元素。然后,您将完全体验到您刚刚告诉我们的内容,所有元素都将放在一边,并且您没有从树概念获得任何优势(深度是元素的数量)。
对于可能已经排序的输入排序,您应该使用除Binary Tree
之外的其他数据结构,有许多概念具有不同的优点和缺点。
还有一个优化,您可以在一段时间后平衡树。正如@Kevin Anderson所提到的,你可以看看self balancing binary trees。此外,标准Java库的实现也是自我平衡(TreeSet at JavaAPI)。也许你也在寻找PriorityQueue
(PriorityQueue at JavaAPI)。还有多个关于如何实现这样一个队列的概念(例如BucketQueue
),同样有优点和缺点。
您的用户案例是什么?如果您告诉我们您想用它实现什么,我们可以帮助您找到合适的数据结构。