Recursion 二叉树展平的时间复杂度
为了展平一棵二叉树,我看到了一个提议的解决方案:(我知道这不是最理想的,但我正试图找出如何确定这种算法的上界。) 显然这至少是O(n),因为我们需要访问树中的每个节点。但是,我试图确定while循环(函数中的最后一行)如何影响复杂性 我已经读到,对于平衡树,这个算法大约是O(nlgn),但是对于不平衡树,这个算法是O(n^2)。我不知道这是否正确,但不管怎样,我都不知道如何做到这一点 举个例子,如果我有一棵树Recursion 二叉树展平的时间复杂度,recursion,time-complexity,binary-tree,big-o,Recursion,Time Complexity,Binary Tree,Big O,为了展平一棵二叉树,我看到了一个提议的解决方案:(我知道这不是最理想的,但我正试图找出如何确定这种算法的上界。) 显然这至少是O(n),因为我们需要访问树中的每个节点。但是,我试图确定while循环(函数中的最后一行)如何影响复杂性 我已经读到,对于平衡树,这个算法大约是O(nlgn),但是对于不平衡树,这个算法是O(n^2)。我不知道这是否正确,但不管怎样,我都不知道如何做到这一点 举个例子,如果我有一棵树 1 2 3 4 5 6 7 我想把它展平,让它看起来像 1 2
1
2 3
4 5 6 7
我想把它展平,让它看起来像
1
2
4
5
3
6
7
然后我预计每个节点完成的工作量大致如下,因为我们似乎只需要迭代左子树的节点:
- 1:n/2
- 2,3:n/4
- 4,5,6,7:n/8
n(n/2)+2(n(n/4))+4(n(n/8))
我想这大概是
(n^2)/2+(2n^2)/4+(4n^2)/8
->(n^2)/2+(n^2)/2
->(n^2)*(1/2+1/2+1/2)
很明显,这不是nlgn,所以我不确定我在哪里搞砸了
这种时间复杂性与不平衡二叉树有什么不同
1
2
4
5
3
6
7