问题描述
我有一个长度为 n
的有序数组,其中包含连续的整数元素 1
到 n
。为这个数组构建红黑树后,我可以使用标准的广度优先搜索方法按级别顺序遍历这棵树。
我的问题是,给定任何n <= 100000000
(对应于从1
到n
的连续整数元素的有序数组),是否可以绕过树的构造而直接返回关卡顺序?
解决方法
如果你不介意额外的空间,你可以这样做。
def level_order(n):
queue = [(1,n)]
i = 0
while i < len(queue):
a,b = queue[i]
i += 1
if a > b:
continue
m = (a + b) // 2
yield m
queue.append((a,m - 1))
queue.append((m + 1,b))
print(list(level_order(13)))