二叉树 - 检查它是否高度平衡

时间:2017-07-25 04:51:08

标签: java binary-tree

我有GeeksforGeeks的示例代码。

它说第一个解决方案是在倾斜的树上的O(N 2 )。

我有一棵这样的树。

    3
     \
      4
       \
        6
         \
          7
           \
            8
             \
              10

但是当我浏览代码时,它似乎是O(N)。它只是递归调用height(node.right);

当O(N 2 )时,有人可以纠正我吗?

感谢。

1 个答案:

答案 0 :(得分:1)

您是否注意到int height(struct node* node)功能?对于从root开始的每个节点,bool isBalanced(struct node *root)函数调用int height(struct node* node)

直接,bool isBalanced(struct node *root)函数访问树中的所有节点(在最坏的情况下)并且每次调用int height(struct node* node)函数(在最坏的情况下{skewed tree}它执行n次)。因此,复杂性为O(N*N) = O(N^2)

此外,int height(struct node* node)函数访问其所有子节点,因此需要访问其所有子节点(最差情况为{skewed tree} n)。