给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
对于每一个结点来说都要满足
左右子树深度之差 <= 1
思路:
- 如果是空树,算平衡
- 如果没有子树,也算平衡
- 求一下左右子树的高度,判断一下差值是否小于1,不满足return false
- 递归判定左子树右子树是不是也是平衡
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int maxDepth(TreeNode root){
if(root == null){
return 0;
}
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
return 1 + (leftDepth > rightDepth? leftDepth : rightDepth);
}
public boolean isBalanced(TreeNode root) {
if(root == null){
return true;
}
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
if(leftDepth - rightDepth > 1 || rightDepth - leftDepth > 1){
return false;
}
return isBalanced(root.left) && isBalanced(root.right);
}
}
这道题的核心思路还是与深度有关
就是遍历到每一结点的时候,都要比较他的左右子树深度差是不是<=1
递归遍历完左子树,递归遍历右子树