我有一个与this one类似的问题。给定产生BST的某个插入序列,我需要计算有多少插入序列(包括给定的插入序列)产生相同的BST。
主要区别在于我的解决方案需要允许重复的键(我只能找到所有键必须都不同的解决方案)。在该问题中指定了等于当前键的键总是放在左子树中(以及较小的键)。
到目前为止,我的代码(受链接问题的公认答案启发,这似乎在键不同的地方起作用):
def num_orders(lst):
if len(lst) <= 1:
return 1
num_remaining = len(lst)-1
left_subtree = []
right_subtree = []
for a in lst[1:]:
if a < lst[0]:
left_subtree.append(a)
if a > lst[0]:
right_subtree.append(a)
return num_orders(left_subtree)*num_orders(right_subtree)*nCr(num_remaining,len(left_subtree))
如何修改此代码以允许重复的密钥?
最佳答案
为了允许左子树中有重复的键,我只需要将if a < lst[0]
更改为if a <= lst[0]
。如果有人需要答案,我将保留问题。
关于python - 创建相同BST的节点插入序列数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54622021/