题意
判断一颗树是否是平衡二叉树
首先需要搞清楚什么是平衡二叉树。平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
树形DP法求解
定义一个类先创建出结果是否是平衡的和高度为多少?
public static class ReturnNode{
public boolean isb;
public int h;
public ReturnNode(boolean isb,int h){
this.isb=isb;
this.h=h;
}
}
主方法
public static ReturnNode is(Node head){
ReturnNode is = is(head);
return is.isb;
}
判断是否是平衡的二叉树方法如果左树是平衡的二叉树并且右树也是平衡的二叉树左树和右树的高度差不大于1
public static ReturnNode isBT(Node head){
if (head==null){
return new ReturnNode(true,0);
}
//判断左树是否为平衡的
ReturnNode left = isBT(head.left);
if (!left.isb){
return new ReturnNode(false,0);
}
//判断右树是否为平衡的
ReturnNode right = isBT(head.right);
if (!right.isb){
return new ReturnNode(false,0);
}
//左树和右树的高度差大于1
if (Math.abs(left.h-right.h)>1){
return new ReturnNode(false,0);
}
return new ReturnNode(true,Math.max(left.h,right.h)+1);
}