题目链接
检查平衡性
题目描述
注意点
- 平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1
解答思路
- 递归寻找每个节点作为根节点时是否是平衡树,对于任意一个节点,判断其是否是平衡树需要分别判断其左子树和右子树是否是平衡树,除此之外还要根据其左右子树的高度判断该节点是否是平衡树,满足三个条件才说明该树是平衡树
- 解答中有两个递归,第一个递归是递归判断每棵子树是否是平衡树,第二个递归是递归计算每棵树的高度
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isBalanced(TreeNode root) {
if (root == null) {
return true;
}
return isBalanced(root.left) && isBalanced(root.right) && Math.abs(countDepth(root.left) - countDepth(root.right)) <= 1;
}
public int countDepth(TreeNode root) {
if (root == null) {
return 0;
}
return Math.max(countDepth(root.left), countDepth(root.right)) + 1;
}
}
关键点
- 递归的思想