1、关于二叉数的题目,一定要明白,二叉树的遍历,老套路了,就是函数(root.left),然后就是(root.right),最后就是相关的操作放置的位置。我总结出来的规律就是这个。
关于递归,我总是会很混乱,带着答案就不知道返回值归到哪里去了。这种问题就交给程序做,我们就想清楚,要实现什么就可以了。

例如这题,通过分析牛逼的人写的算法,想法就是:

public class Solution {
    public boolean IsBalanced_Solution(TreeNode root) {
        return depth(root) != -1;
    }
    public int depth(TreeNode root){
        if(root == null) return 0;//这个就是递归结束的条件
        int left = depth(root.left);//看成整体,知道返回值是左边树的高度就可以了
        if(left == -1) return -1;//这里的return可不是终止条件,
            //这个就是结束函数了,直接返回最开始的调用处,可以调试看看
        int right = depth(root.right);//同理,看成整体,知道返回值是右边树的高度就可以了
        if(right == -1) return -1;
        if(left - right > 1 || left - right < -1) 
            return -1;//这里就是判断高度是否符合条件
        else
            return 1+(left > right ? left : right);//计算节点的深度,例如,
            //叶节点,深度就是1开始计算的额
    }
}