目录
平衡二叉树
描述
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
示例 1
给定二叉树 [3,9,20,null,null,15,7]
3 / \ 9 20 / \ 15 7
返回 true
示例 2
给定二叉树 [1,2,2,3,3,null,null,4,4]
1 / \ 2 2 / \ 3 3 / \ 4 4
返回 false
限制
0 <= 树的结点个数 <= 10000
数据结构
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
方法:递归
这题就是求左右子树的深度差是否超过1,核心还是求树的深度,所以和上题类似都可以用递归求解。
class Solution {
boolean isBalanced=true;
public boolean isBalanced(TreeNode root) {
return depth(root)!=-1;
}
public int depth(TreeNode root){
if (root==null) return 0;
else{
int left=depth(root.left);//获取左边子树深度
if (left==-1) return -1;//如果左边子树不平衡,直接返回
int right=depth(root.right);//获取右边子树深度
if (right==-1) return -1;//如果右边子树不平衡,直接返回
if (left-right>1 || left-right<-1){
return -1;//如果两边子树的深度差超过1,则认为不平衡直接返回
}
return 1+Math.max(left,right);//返回当前节点的深度
}
}
}