LeetCode110-平衡二叉树
题目
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
解法
方法一:自顶向下递归
判断当前节点的左右子树是否是二叉平衡树,然后判断自身是否是二叉平衡树。
缺点:计算高度的函数会被重复调用
class Solution {
public boolean isBalanced(TreeNode root) {
if(root == null) return true;
if(root.left == null && root.right == null) return true;
boolean left = isBalanced(root.left);
boolean right = isBalanced(root.right);
return left&&right&&Math.abs(height(root.left)-height(root.right))<2;
}
public int height(TreeNode root){
if(root == null) return 0;
int left = height(root.left);
int right = height(root.right);
return 1+Math.max(left,right);
}
}
方法二:自底向上递归
利用获取高度的函数直接判断是否是二叉平衡树
class Solution {
public boolean isBalanced(TreeNode root) {
return height(root)>=0;
}
//若子树不是二叉平衡树,高度直接返回-1
public int height(TreeNode root){
if(root == null) return 0;
int left = height(root.left);
int right = height(root.right);
if(left==-1||right==-1||Math.abs(left-right)>1){
return -1;
}
return Math.max(left,right)+1;
}
}