[英]mergesort tree implementation in python
n=4
arr=[1,2,3,4]
tree=[[] for i in range(2*n-1)]
def build_tree(idx,l,r):
if l==r:
tree[idx].append(arr[l])
else:
mid=(l+r)//2
build_tree(2*idx,l,mid)
build_tree(2*idx+1,mid+1,r)
tree[idx]=merge(tree[2*idx],tree[2*idx+1])
def merge(left,right):
myList=[]
i=0
j=0
while i < len(left) and j < len(right):
if left[i] < right[j]:
myList.append(left[i])
i += 1
else:
myList.append(right[j])
j += 1
while i < len(left):
myList.append(left[i])
i += 1
while j < len(right):
myList.append(right[j])
j += 1
return myList
if __name__ == '__main__':
build_tree(0,0,n-1)
print(tree)
我在 python https://discuss.codechef.com/t/merge-sort-tree-tutorial/14277中实现合并排序树。 .当我打印树时,我正在关注 output
[[1, 2, 3, 4], [3, 4], [3], [4], [], [], []] 这是错误的。
但是缺少诸如 [1] 和 [2] 之类的一些值。我没有错在哪里。互联网上没有 python 实现可用于合并排序树。请帮助我更正它,或者如果可能,请提供另一种实现在 python 中。
您在递归步骤中执行的索引数学是错误的,因此只出现树的右半部分。 这个问题与零索引有关。 如果根为零,则左分支需要为1
,右分支需要为2
。 您的代码生成0
和1
,因此一半的树消失了。
尝试:
else:
mid=(l+r)//2
build_tree(2*idx+1,l,mid) # +1 for idx argument here
build_tree(2*idx+2,mid+1,r) # +2 instead of +1 here
tree[idx]=merge(tree[2*idx+1],tree[2*idx+2]) # also update the indexes used here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.