摘要: 看答案做出来了,其实做的并不好,中间被各种cases虐。 思路其实并不难,in order traversal是肯定的,顺序是从小到大。 当前应该比前一个大,如果cur = root.val) { if (first == null) { first = prev; } if (first != n 阅读全文
posted @ 2016-11-26 12:59 哇呀呀..生气啦~ 阅读(100) 评论(0) 推荐(0)
摘要: 一刷。 这个题发现笔记里没有,只能从LC的存档里找到一刷的做法。 其中while loop是模拟从左志往回到root的过程,最后记录ROOT,就是sub tree的最大值,并且要保证当前subTree的ROOT要小于接下来右支的traversal的所有值。 说白了是用Stack模拟了per orde 阅读全文
posted @ 2016-11-26 09:09 哇呀呀..生气啦~ 阅读(208) 评论(0) 推荐(0)
摘要: 惭愧啊,虽然二刷和一刷思路运行时间都一样,但是二刷代码居然比一刷还繁琐。 二刷傻了,居然分情况讨论有1,2,3个的时候。。其实直接来就行。 三刷。 按divide&conquer里的divide分,最后和一起就行了。 递归,每次选中点M,left subtree (L~(m 1)) right su 阅读全文
posted @ 2016-11-26 08:11 哇呀呀..生气啦~ 阅读(109) 评论(0) 推荐(0)
摘要: 不要被题目迷惑,肯定是要O(N)的时间,在不改变数据结构的情况下。 就是in order traverse,因为是BST,所以遍历顺序是从小到大,遍历的第K个元素就是第K小的。 可以Iteratively,也开始recursively. 至于follow up,无非是如何提供信息,让每次左还是右能做 阅读全文
posted @ 2016-11-26 05:50 哇呀呀..生气啦~ 阅读(118) 评论(0) 推荐(0)