我正在实施BST。 现在我想重新平衡我的树。我已经做了一个可以在O(nlogn)中完成的实现,但是当我用google搜索时,我发现它可能在O(n)中,但我无法找到。这是我的代码:
现在方法isBalanced()花费O(n)时间并检查我的树是否平衡。我可以删除该语句,但方法toArrayList()也需要O(n)时间。这个方法给了我一个arraylist,树中的所有节点从最低到最高排序。
因此,如果我使用主方法计算我的复杂性,我会得到O(nlogn)作为复杂性。我真的不知道如何在不使用arraylist / array的情况下实现它。我已经检查了Day-stout-warren算法,但是我没有得到它:)
答案 0 :(得分:2)
您的算法具有线性时间复杂度。递归关系为T(n) = 2 * T(n / 2) + O(1)
,因此T(n) = O(n)
。