这个题,用到一个套路就是树形BP,这个套路进阶才讲。重点时列出所有的可能性,记住递归遍历二叉树无论怎么遍历,都是访问每一个节点三次,所以可以统计信息返回。当然自己用栈实现的遍历二叉树不一定时三次
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isBalanced(TreeNode root) {
//baseline
return isBalance(root).flag;
}
//其实就是左右子树返回信息,根节点获得信息,如果已经满足莫条件后续的就不用返回信息了
public static tree isBalance(TreeNode root){
if(root==null){
return new tree(true,0);
}
tree left=isBalance(root.left);
if(!left.flag){
return new tree(false,0);
}
tree right=isBalance(root.right);
if(!right.flag){
return new tree(false,0);
}
if(Math.abs(left.h-right.h)>1){
return new tree(false,0);
}
return new tree(true,Math.max(left.h,right.h)+1);
}
}
//定义的一个返回信息的类型,左右子树都会返回信息且 信息类型一样
public class tree{
boolean flag;
int h;
public tree(boolean flag,int h){
this.flag=flag;
this.h=h;
}
}