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开始计算的额 } }