描述
给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。
样例
样例 1:
输入: tree = {1,2,3}
输出: true
样例解释:
如下,是一个平衡的二叉树。
1
/ \
2 3
样例 2:
输入: tree = {3,9,20,#,#,15,7}
输出: true
样例解释:
如下,是一个平衡的二叉树。
3
/ \
9 20
/ \
15 7
样例 2:
输入: tree = {1,#,2,3,4}
输出: false
样例解释:
如下,是一个不平衡的二叉树。1的左右子树高度差2
1
\
2
/ \
3 4
代码部分
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: The root of binary tree.
* @return: True if this Binary tree is Balanced, or false.
*/
public boolean isBalanced(TreeNode root) {
// write your code here
if(root==null)return true;
int dep=Math.abs(getHigh(root.left)-getHigh(root.right));
if(dep<2&&isBalanced(root.left)&&isBalanced(root.right)){
return true;
}
else return false;
}
public int getHigh(TreeNode root){
if(root==null)return 0;
int temp=getHigh(root.left)>=getHigh(root.right)?getHigh(root.left):getHigh(root.right);
return temp+1;
}
}
补充说明
平衡二叉树为真的条件是左右子树的深度差小于2且左右子树也分别为平衡二叉树。
其他知识点
Java.lang提供java语言程序设计的基础类(基础数据类型的封装类、Class、math、线程类)。lang包中的类的应用不需要手动import。