微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我有一个长度为 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)))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。