Recursion 二叉树展平的时间复杂度

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

为了展平一棵二叉树,我看到了一个提议的解决方案:(我知道这不是最理想的,但我正试图找出如何确定这种算法的上界。)

显然这至少是O(n),因为我们需要访问树中的每个节点。但是,我试图确定while循环(函数中的最后一行)如何影响复杂性

我已经读到,对于平衡树,这个算法大约是O(nlgn),但是对于不平衡树,这个算法是O(n^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