题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
知识点
1.平衡二叉树
满足每个节点左右子树高度差的绝对值,不超过1(-1,1,0) 的二叉树为平衡二叉树
2.左右子树高度差(递归)
public int high(TreeNode root){
if(root == null){
//map.put(root,true);
return 0;
}
//递归求当前节点左子树和右子树高度
int LD = high(root.left);
int RD = high(root.right);
//以当前节点为根的树,高度为左右子树最大值加1
int h = ((LD>RD)?LD:RD)+1;
//返回当前树高
return h;
}
代码
public class Solution {
boolean judge = true; //设置全局变量,若树中有一个节点不平衡,树为非平衡树
public boolean IsBalanced_Solution(TreeNode root) {
//根节点为空,空树,平衡
if(root==null){
return true;
}
//得出judge的值
high(root);
return judge;
}
//求树的高度,并判断当前节点是否平衡
public int high(TreeNode root){
if(root == null){
//map.put(root,true);
return 0;
}
//递归求当前节点左子树和右子树高度
int LD = high(root.left);
int RD = high(root.right);
//以当前节点为根的树,高度为左右子树最大值加1
int h = ((LD>RD)?LD:RD)+1;
//判断当前节点是否平衡
if((LD-RD==1)||(LD-RD==-1)||(LD-RD==0)){
judge = true;
}
else
judge = false;
//返回当前树高
return h;
}
}