Data structures 这是一个小堆吗?

Data structures 这是一个小堆吗?,data-structures,tree,Data Structures,Tree,我想在一个列表中找到所有和n的数字对 如果我构建一棵树,其属性是每个节点的子节点都是大于自身的所有值,那么我将能够遍历它,找到所有和n之和的组合: 例如,对于列表[1,2,3,4]: 这是什么样的数据结构 它是一个最小堆,对每个节点的子节点数没有限制,并且允许重复吗?您的目标数是N。您可以保留一个哈希表,其中包含迄今为止遇到的数字,当您遇到一个新的数字X时,您可以测试是否在哈希表中遇到了N-X 伪代码: var encountered <- hashTable(key: integer,

我想在一个列表中找到所有和n的数字对

如果我构建一棵树,其属性是每个节点的子节点都是大于自身的所有值,那么我将能够遍历它,找到所有和n之和的组合:

例如,对于列表[1,2,3,4]:

这是什么样的数据结构

它是一个最小堆,对每个节点的子节点数没有限制,并且允许重复吗?

您的目标数是N。您可以保留一个哈希表,其中包含迄今为止遇到的数字,当您遇到一个新的数字X时,您可以测试是否在哈希表中遇到了N-X

伪代码:

var encountered <- hashTable(key: integer, value: any)
var recordList <- list(value: pairs of integers)
for each element in inputList
  if encountered(N-element) then push [element, N-element] into recordList 
  push element into encountered
loop
return recordList

我想你可以给它起个名字,也许是贝纳斯顿堆。它能很好地从舌头上滚下来。这个结构如何帮助实现这个目标?如果n=7,则最上面的节点1不能帮助您找到3+4。如果您的输入是[1,3,4]且n=7,那么1对任何结果都没有任何影响。我的意图是进行深度优先遍历,在每个节点上保持一对prev,curr,并相应地继续遍历。这样不行吗?只是猜测而已。遍历for n===7:1,2,2,3,3,4-record,2,4,1,3,3,4-record,discard,1,4这似乎是一个非常时间和空间效率低下的问题解决方案,您的树的元素将与原始列表大小的^2成比例,并且算法也将在树上迭代多次,你可以用一个哈希表在线性时间和空间中求解。提示:只要对列表进行排序,你就会得到与你的数据结构等效的数据结构——每个链表节点后面都跟有比它大的所有节点。这很巧妙。我在一次采访中被要求做类似的事情。我有一个效率较低的解决方案,并且得到了使用哈希表的提示,这就是我想到的。
var encountered <- hashTable(key: integer, value: any)
var recordList <- list(value: pairs of integers)
for each element in inputList
  if encountered(N-element) then push [element, N-element] into recordList 
  push element into encountered
loop
return recordList