描述:
给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。
样例
给出二叉树 A={3,9,20,#,#,15,7}
, B={3,#,20,15,7}
A) 3 B) 3
/ \ \
9 20 20
/ \ / \
15 7 15 7
二叉树A是高度平衡的二叉树,但是B不是
算法实现:
public boolean isBalanced(TreeNode root) {
// write your code here
if(root==null){
return true;
}else{
return checkNode(root);
}
}
private boolean checkNode(TreeNode root){
//判断当前节点是否平衡
if(root==null){
return true;
}
//判断当前节点左子树是否平衡
if( !checkNode(root.left) ){
return false;
}
//判断当前节点右子树是否平衡
if( !checkNode(root.right) ){
return false;
}
int left = getDepth(root.left);
int right = getDepth(root.right);
if(Math.abs(left-right)>1){
return false;
}else{
return true;
}
}
//递归计算获取根节点为root的高度
private int getDepth(TreeNode root){
int left = 0;
int right = 0;
if( root == null ){
return 0;
}else{
left = 1+getDepth(root.left);
right = 1+getDepth(root.right);
}
if(left>right){
return left;
}else{
return right;
}
}