题目

判断一棵二叉树是否是平衡二叉树

思路

平衡二叉树的特点是左右子树的高度差不超过1 只需要递归查找左右子树的高度进行比较,这里再次简述一下递归的三个要点。
1.终止条件 2.逻辑处理 3.drll down
不要进行人肉递归,只需要考虑root节点的左右子树的高度 将问题简单话,寻找重复子问题。

code

	private boolean flag = true;//是否平衡
    public boolean IsBalanced_Solution(TreeNode root) {
        if(root == null) return flag;
        dfs(root);
        return flag;
    }
    
    private int dfs(TreeNode root){
        //1.终止条件
        if(root == null || !flag ){
            return 0;
        }
        int left = dfs(root.left);
        int right = dfs(root.right);
        flag = Math.abs(left-right) > 1 ? false : true;
        return 1+Math.max(left,right);
    }