【发布时间】:2012-12-14 13:05:13
【问题描述】:
问题是,给定一个 BST,找出是否有两个数字相加等于给定数字 k。不应使用额外的内存。
现在,如果它是一个排序数组,我可以简单地保留两个指针,一个在开头,一个在结尾。在每一步,我都会计算指针指向的两个数字的总和,如果总和小于 k,我会递增起始指针,否则递减结束指针,直到匹配或指针重叠。
我可以对 BST 做同样的事情,通过中序遍历将其转换为排序数组,但这需要额外的内存。所以我认为迭代器解决方案是有序的。我会保留两个迭代器,一个会以正常的中序方式遍历 BST,调用它将返回下一个更大的数字,另一个会以逆序方式遍历 BST,在每次调用时返回下一个较小的数字。
知道如何设计这样的迭代器吗?我更喜欢 Python/Javascript 的解决方案。虽然 Python 提供了 iter 这样的函数,但我想使用闭包来设计它。
【问题讨论】:
-
您可以按顺序遍历 BST 而无需将其复制到数组中——这只是深度优先搜索。你问怎么写?
-
我不知道他们是否会提供帮助,但 Nicholas Zakas 有一个两部分的关于 BST 的 Javascript 系列:nczonline.net/blog/tag/binary-search-tree
-
@katrielalex,不完全是。我正在寻找一个迭代器,它会记住最后访问的节点,以便在后续调用时返回下一个节点..
-
@Cupidvogel,yield 专为此类任务而设计。
标签: javascript python closures binary-tree binary-search-tree