给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
1 | 3 |
返回 true
。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
1 | 1 |
返回 false
。
方法一:自顶向下递归
递归表达式如下所示:
$$
isBalanced(root)=
\begin{cases}
true, & \mathrm{如果root为null} \\
isBalanced(root.left) \land isBalanced(root.right), & \mathrm{如果root节点是平衡的} \\
\end{cases}
$$
1 | /* |
复杂度分析:时间复杂度为O(n log n),空间复杂度为O(n)。其中,n为二叉树中节点的个数。
方法二:自底向上递归
思路:方法一从根节点出发,逐一判断当前节点是否平衡,从而导致每次判断都需要计算左右子树的高度。
如果从叶子节点开始,在递归的同时,就可以将每个节点的高度记录下来,从而避免了方法一中的重复计算。
1 | /** |
复杂度分析:时间复杂度和空间复杂度均为O(n)。其中,n为二叉树中节点的个数。