有了求二叉树的深度的经验之后来做这个问题,我们很容易想到一种思路,就是在遍历树的每个节点的时候,调用函数treeDepth得到它的左右子树的深度。如果每个节点的左右字数的深度相差都不超过1,那么按照定义它就是一颗平衡二叉树,这种思路对应的代码如1所示。这个算法的时间复杂度是O(NlogN):在最差情况下(为“满二叉树”时),isBalanced遍历树所有节点,判断每个节点的深度需要遍历各子树的所有节点。满二叉树高度为O(logN),将满二叉树按层分为log(N+1)层,通过调用treeDepth来判断二叉树各层的节点对应子树的深度,需遍历节点数量为N x 1,$\frac{N-1}{2}$ x 2,$\frac{N-3}{4}$ x 4,$\frac{N-7}{8}$ x 8,…, 1 x $\frac{N+1}{2}$,因此各层执行的时间复杂度为O(N)。因此总时间复杂度为O(NxlogN)。另外,当树退化成链表时空间复杂度是O(N)。