60.平衡二叉树
输入一棵二叉树的根结点,判断该树是不是平衡二叉树。
如果某二叉树中任意结点的左右子树的深度相差不超过 1,那么它就是一棵平衡二叉树。
注意:
- 规定空树也是一棵平衡二叉树。
数据范围:
树中节点数量 [0,500]。
样例:
输入:二叉树[5,7,11,null,null,12,9,null,null,null,null]如下所示,
输出:true
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
//全局变量,用于记录树是否平衡
boolean res = true;
public boolean isBalanced(TreeNode root) {
//深度优先搜索
dfs(root);
//返回结果
return res;
}
public int dfs(TreeNode root){
//递归终止条件:空节点高度为0
if(root == null)return 0;
//递归计算左子树高度
int l = dfs(root.left);
//递归计算右子树高度
int r = dfs(root.right);
//检查当前子树是否平衡(左右高度差不超过1)
//不平衡则更新结果
if(Math.abs(l-r)>1)res = false;
//返回当前子树的高度(左右子树最大高度+1)
return Math.max(l,r)+1;
}
}