判断一棵二叉树是否为平衡二叉树:
实现一个函数,检查二叉树是否平衡,平衡二叉树的定义如下,对于树中的任意 一个结点,其两颗子树的高度差不超过1。
给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。
import java.util.*;
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Balance {
public boolean isBalance(TreeNode root) {
//根结点为空,则这个二叉树为平衡二叉树
if(root==null){
return true;
}
int left=getLength(root.left); //左子树的高度
int right=getLength(root.right); //右子树的高度
if(Math.abs(left-right)<=1){
return isBalance(root.left)&&isBalance(root.right);
}else{
return false; //只要有一个结点不平衡,则返回false
}
}
//计算二叉树的高度
private int getLength(TreeNode root) {
if(root==null){
return 0;
}
int l=getLength(root.left); //左子树的高度
int r=getLength(root.right); //右子树的高度
if(l>r){
return l+1; //二叉树的高度为左右子树高度最大值加1
}else{
return r+1;
}
}
}