Java二进制搜索树 - 插入实现

时间:2015-05-13 23:08:39

标签: java algorithm tree binary-search-tree

我对二叉搜索树插入的实现存在这个问题。现在我已尝试使用递归方法和迭代方法。我到目前为止的方式是“最好”,因为对于树大小= 31609和树高= 35,插入大约需要 100秒,并且应该是WAAAAAAY低于1秒。有人可以给我一个暗示我可能做错的事吗?

以下是我到目前为止设法完成的代码(无重复插入):

ans

1 个答案:

答案 0 :(得分:1)

如果您使用第270行中定义的函数进行插入,则实际上可以解释很长时间。

看看这段代码:

public void insert(int val) {

        if (root == null) {
            nodes++;
            root = new Node(val);
        } else if (!root.exists(val)) {
            root.insert(val);
        }

    }

这会调用函数exists(),其定义如下:

boolean exists(int val) {
            return val == this.elem
                    || (val < this.elem ? (this.left != null && this.left.exists(val))
                            : (this.right != null && this.right.exists(val)));
        }

当你看到这段代码时,你可以很容易地发现,每次调用这个函数时,你的代码都会以递归的方式遍历整个树!因此,如果你插入100K次,你的代码最坏的时候运行在O(n ^ 2 * logn)时间,所以100秒实际上是一个很好的运行时间!

我认为你要做的就是修改你的exists()函数。