题目:
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
解题思路:
1.如果树为空,返回true。
2.如果不为空,则定义一个方法可以计算出左树和右树的深度。然后用Math方法中的abs(绝对值)函数,计算左树减去右树的值,如果大于1,则与题目不符合,返回false。如果小于1,则该节点是平衡的继续遍历下一个节点(左树或者右树)。
代码实现:
class Solution {
public boolean isBalanced(TreeNode root) {
TreeNode cur =root;
if (root==null)return true;
int left= isbalancedChilde(root.left);
int right = isbalancedChilde(root.right);
if (Math.abs(left-right)>1) {
return false;
}
return isBalanced(root.left)&&isBalanced(root.right);
}
public int isbalancedChilde(TreeNode root){
if (root==null)return 0;
int leftTree =isbalancedChilde(root.left);
int rightTree =isbalancedChilde(root.right);
return Math.max(leftTree,rightTree)+1;
}
}