在O(n)中重新平衡BST而不是O(nlogn)

时间:2014-11-17 18:23:20

标签: java algorithm binary-search-tree

我正在实施BST。 现在我想重新平衡我的树。我已经做了一个可以在O(nlogn)中完成的实现,但是当我用google搜索时,我发现它可能在O(n)中,但我无法找到。这是我的代码:

现在方法isBalanced()花费O(n)时间并检查我的树是否平衡。我可以删除该语句,但方法toArrayList()也需要O(n)时间。这个方法给了我一个arraylist,树中的所有节点从最低到最高排序。

因此,如果我使用主方法计算我的复杂性,我会得到O(nlogn)作为复杂性。我真的不知道如何在不使用arraylist / array的情况下实现它。我已经检查了Day-stout-warren算法,但是我没有得到它:)

1 个答案:

答案 0 :(得分:2)

您的算法具有线性时间复杂度。递归关系为T(n) = 2 * T(n / 2) + O(1),因此T(n) = O(n)