无需构建红黑树即可获得广度优先级别顺序

问题描述

我有一个长度为 n 的有序数组,其中包含连续的整数元素 1n。为这个数组构建红黑树后,我可以使用标准的广度优先搜索方法按级别顺序遍历这棵树。

我的问题是,给定任何n <= 100000000(对应于从1n的连续整数元素的有序数组),是否可以绕过树的构造而直接返回关卡顺序?

解决方法

如果你不介意额外的空间,你可以这样做。

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)))