题目
思路
首先复习一下平衡二叉树,一般来说平衡二叉树都是搜索树,因为这个是为了使得搜索树的层数尽可能少造的树,从而使得搜索的时间不是最坏情况
其实判断是否是avt就是看左右两颗子树的层高之差,然后在递归的判断左右两颗子树,但是这个样子的话,时间复杂度满足不了,因为每一次调用函数都要求一次层高。
所以我们考虑,能不能把求层高和判断结合起来。
求层高其实也是一个递归的函数,左子树和右子树的层高中较高的一个加一。和判断avt差不多。
所以我们考虑把定义一个全局变量flag,在求层高的时候 ,如果有不满足avt的我们把flag设置为false。
代码
import static java.lang.Math.*;
public class Solution {
boolean flag=true;
public int heightOfTree(TreeNode root) {
if(root==null)return 0;
int l=heightOfTree(root.left);
int r=heightOfTree(root.right);
if(abs(l-r)>1)
flag=false;
return max(l,r)+1;
}
public boolean IsBalanced_Solution(TreeNode root) {
if(root==null) return true;
heightOfTree(root);
return flag;
}
}