题目
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过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
。
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as:
a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
Example 1:
Given the following tree [3,9,20,null,null,15,7]
:
1 | 3 |
Return true.
Example 2:
Given the following tree [1,2,2,3,3,null,null,4,4]
:
1 | 1 |
Return false.
解题方法
递归
计算左、右子树的深度,如果深度差大于1,则不为平衡二叉树;否则递归判断左、右子树是否是平衡二叉树。这段代码跑了4ms,超过了22.22%的Java提交。这段递归的效率非常低,重复计算了很多次子树的深度,进行了多轮递归,还有很大的优化空间。
1 | class Solution{ |
使用一个全局变量,保存二叉树是否是平衡的状态。递归计算左右子树的深度,如果深度差大于1则修改状态。只需要进行一轮递归,这段代码跑了2ms,超过了92.98%的Java提交。
1 | class Solution{ |