LC[110. 平衡二叉树]
LC110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:true
提示:
- 树中的节点数在范围
[0, 5000]内 -104 <= Node.val <= 104
题解
方法一:自顶向下递归,通过类似于前序遍历的方法,求出当前根节点的左右子树高度并且比较,再递归调用左右子树.很明显的缺点,每次计算高度都是从最深处计算,没有利用到低层节点已经求出的高度值。在这个过程中先判断高处是否为平衡树。
时间复杂度:O(n^2)
空间复杂度O(n)
class Solution {
public boolean isBalanced(TreeNode root) {
if(root == null) return true;
return Math.abs(high(root.left)-high(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right);
}
public int high(TreeNode root){
if(root == null) return 0;
return Math.max(high(root.left),high(root.right)) + 1;
}
}
方法二:自底向上递归。通过类似于后续遍历的方法,求当前根节点的左右子树高度时,递归调用左右子树求树高,从低处到高处求到树高,在这个过程中首先判断底层是否为平衡树。
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public boolean isBalanced(TreeNode root) {
return high(root)>=0;
}
public int high(TreeNode root){
if(root == null) return 0;
int leftHeight ;
int rightHeight;
if((leftHeight =high(root.left)) == -1|| (rightHeight =high(root.right))== -1 || Math.abs(leftHeight-rightHeight)>1){
return -1;
}
return Math.max(leftHeight,rightHeight)+1;
}
}
浙公网安备 33010602011771号