【发布时间】:2015-05-13 23:08:39
【问题描述】:
我在执行二叉搜索树插入时遇到了这个问题。现在我用递归方法和迭代方法都试过了。到目前为止我得到的方式是“最好的”,因为对于树大小 = 31609 和树高 = 35,插入大约需要 100 秒,它应该是 WAAAAAAY 低大约一秒.有人可以给我一个提示我可能做错了什么吗?
这是我到目前为止所做的代码(插入不重复):
void insert(int val){
if(this.elem < val){
if(this.right != null){
this.right.insert(val);
}
else{
nodes++;
this.right = new Node(val);
}
}
else if(this.elem > val){
if(this.left != null){
this.left.insert(val);
}
else{
nodes++;
this.left = new Node(val);
}
}
else {
return;
}
}
【问题讨论】:
-
我怀疑问题出在
insertion本身。能否提供有关构造函数的信息? -
构造函数真的很基础:private Node (int elem){ this.elem=elem;}
-
nodes++是什么意思?您是否在每个节点存储树的大小? -
单次调用 insert 需要 100 秒,还是构建整个树需要 100 秒?
-
@drBet:问题可能出在其他地方,因为this ideone 只需要大约 40 毫秒来处理 10 万次插入(是的,我知道这只是一个测试,但 100 秒和 40 毫秒之间存在巨大差异)。我能想到的唯一问题是数据已排序,因此您创建了一个链表。这棵树不是自平衡的,因此如果数据是有序的,这将导致问题。
标签: java algorithm tree binary-search-tree