Redian新闻
>
LC的BST iterator到底要考察什么?
avatar
LC的BST iterator到底要考察什么?# JobHunting - 待字闺中
A*e
1
给的BST节点没有父指针。然后有下面的要求:
Note: next() and hasNext() should run in average O(1) time and uses O(h)
memory, where h is the height of the tree.
试着写了一个版本,直接周游BST,把结果存在数组里,然后hasNext()和next()都是O(
1)和O(1),居然也过了。感觉在作弊。
avatar
w*h
2
这个好像不是O(h) memory

O(

【在 A*******e 的大作中提到】
: 给的BST节点没有父指针。然后有下面的要求:
: Note: next() and hasNext() should run in average O(1) time and uses O(h)
: memory, where h is the height of the tree.
: 试着写了一个版本,直接周游BST,把结果存在数组里,然后hasNext()和next()都是O(
: 1)和O(1),居然也过了。感觉在作弊。

avatar
y*z
3
楼主 你理解错题意了
题意不是让你把所有的节点遍历出来 是要你写一个iterator() iterator只会返回下
一个节点 当存在无数个节点时 你那样写根本就没有结果 而iterator可以返回节点
avatar
x*r
4


【在 y****z 的大作中提到】
: 楼主 你理解错题意了
: 题意不是让你把所有的节点遍历出来 是要你写一个iterator() iterator只会返回下
: 一个节点 当存在无数个节点时 你那样写根本就没有结果 而iterator可以返回节点

avatar
A*e
5
这里的BST没有父指针,怎么返回下一个节点?
另外BST的节点当然不会是无数个。

【在 y****z 的大作中提到】
: 楼主 你理解错题意了
: 题意不是让你把所有的节点遍历出来 是要你写一个iterator() iterator只会返回下
: 一个节点 当存在无数个节点时 你那样写根本就没有结果 而iterator可以返回节点

avatar
B*t
6
morris traversal

【在 A*******e 的大作中提到】
: 这里的BST没有父指针,怎么返回下一个节点?
: 另外BST的节点当然不会是无数个。

avatar
b*n
7
可以用stack,参考LC的iterative traversal的方法

【在 A*******e 的大作中提到】
: 这里的BST没有父指针,怎么返回下一个节点?
: 另外BST的节点当然不会是无数个。

avatar
b*n
8
not a good idea
这样会改变原来tree的结构

【在 B********t 的大作中提到】
: morris traversal
avatar
A*e
9
所以iterator初始化到最小节点,next()就是iterative traversal里走一步?这题出
的很生硬啊。

【在 b*****n 的大作中提到】
: 可以用stack,参考LC的iterative traversal的方法
avatar
b*n
10
差不多就这样吧,不过也不一定一开始就要初始化到最小节点,
只要能保证next()平均O(1)就行了。
这个题我被FB问到,这样就过了。。。

【在 A*******e 的大作中提到】
: 所以iterator初始化到最小节点,next()就是iterative traversal里走一步?这题出
: 的很生硬啊。

avatar
A*e
11
这个真有点屠龙之技的意思,不如直接问stl map的iterator,那个还实用些。BST没必
要省略父指针。这点内存节省和多出的编程开销比,其实不划算。

【在 b*****n 的大作中提到】
: 差不多就这样吧,不过也不一定一开始就要初始化到最小节点,
: 只要能保证next()平均O(1)就行了。
: 这个题我被FB问到,这样就过了。。。

avatar
w*5
12
这个题和iterative遍历树差不多,应该是考察stack的使用吧。

O(

【在 A*******e 的大作中提到】
: 给的BST节点没有父指针。然后有下面的要求:
: Note: next() and hasNext() should run in average O(1) time and uses O(h)
: memory, where h is the height of the tree.
: 试着写了一个版本,直接周游BST,把结果存在数组里,然后hasNext()和next()都是O(
: 1)和O(1),居然也过了。感觉在作弊。

avatar
y*z
13

不需要父节点
这题考的其实是stack +遍历
iterator的用处是不需要知道全部节点就能尽快返回下一个节点
或者你假设一个bst有一亿个节点 如果全部遍历估计要几个小时
用stack可以尽快取出一个节点 如果遍历到null了就要adjust 然后又发现新的节点
这题很简单的

【在 A*******e 的大作中提到】
: 这里的BST没有父指针,怎么返回下一个节点?
: 另外BST的节点当然不会是无数个。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。