摘要: 和same tree是一样的,就是same tree里比较的是两个树的同一位置,现在是看做这个树和这棵树的翻转 阅读全文
posted @ 2016-06-04 06:51 warmland 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 逻辑: 1.如果两者同时为空,返回true 2.如果任一为空,返回false(因为已经判断过不可能同时为空了) 3.如果两者值不相等,返回false 4.两树的左子树和右子树都是同一棵树,递归 阅读全文
posted @ 2016-06-04 05:36 warmland 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 1. 判断是否是BST的逻辑 1)左子树所有节点值都必须 小于 根节点的值 2)右子树所有节点值都必须 大于 根节点的值 3)左子树和右子树都必须也是BST 2. 所以helper函数的逻辑大概是: 1)如果root是空,返回true 2)如果当前节点值在允许的最小值很最大值之外,返回false 3 阅读全文
posted @ 2016-06-04 04:31 warmland 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 1 public List generateTrees(int n) { 2 List res = new ArrayList(); 3 if(n helper(int left, int right) { 10 List res = new ArrayList(); 11 if(left > right) { 12... 阅读全文
posted @ 2016-05-04 06:18 warmland 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 1. 正常的解法:动规 从理解上说, n = 1,有1种可能 n = 2, 有2种可能,a.左子树0节点,右子树1个 b.左子树1个节点,右子树零个 n = 3,有三个节点,这个数的组成可能是,选任意一个作为根节点,然后a.左子树有0个节点,右子树2个 b.左子树一个节点,右子树一个节点 c.左子树 阅读全文
posted @ 2016-05-04 05:28 warmland 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 1. Recursive 2. iterative 建一个堆栈,如果是左边还有节点,那就一直走到底。 如果发现已经没有左节点了,那么就从堆栈里弹出最后一个,访问它,然后指向它的右节点(因为它的全部左节点和它本身都已经被访问过了) 阅读全文
posted @ 2016-05-04 05:06 warmland 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 从后往前merge 阅读全文
posted @ 2016-04-04 13:07 warmland 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 三个指针,一个pre,一个cur,一个next(下一个不同的数字) 如果不遇到重复数字,那么三个都往前移一格 如果遇到重复数字,那么pre.next = next,这个时候pre并没有改变 阅读全文
posted @ 2016-04-03 05:45 warmland 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 和1相比就是多了一个可能,就是截断以后两头一样,所以如果两头是一样的,就往前移动到不一样的地方就好了 读了23,24两行 阅读全文
posted @ 2016-04-03 05:21 warmland 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 虽然是hard难度,其实也没有很难 分为三种情况: 1. 如果nums[mid] == target 那么返回mid 2. 如果nums[mid] < nums[right] 那么说明在nums里面,从mid到right的顺序是正确的,所以: 1)如果target值范围介于nums[mid]和num 阅读全文
posted @ 2016-04-03 04:44 warmland 阅读(98) 评论(0) 推荐(0) 编辑