algorithm - 在不构造红黑树的情况下获得广度优先(级别)顺序
问题描述
n
我有一个包含连续整数元素1
的有序长度数组n
。在为这个数组构建红黑树之后,我可以使用标准的广度优先搜索方法按级别顺序遍历这棵树。
我的问题是,给定任何(对应于具有从ton <= 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)))
推荐阅读
- vue.js - ipcRenderer.on('someevent') 在 VueJs 的渲染器进程中的 created() 或 mounted() 中?
- python - 根据文件名中的特定模式移动文件,同时保留文件夹结构
- testing - 如何通过指定元数据在 CI 中并行运行 TestCafe 测试
- sass - 迁移到 .NET 5.0 并使用 SASS 后,Blazor CSS 隔离不起作用且未添加范围标识符
- powershell - 通过网络媒体设备播放音频
- performance - 性能取决于索引类型
- c# - string.IndexOf 在 .NET 5.0 中返回不同的值
- python - Python中的跨进程内存文件系统
- java - 尝试加载 facebook 原生广告时,我的 android 应用程序崩溃 (java.lang.NoSuchMethodError: No static method isChildDirected())
- laravel - Laradock 404 Not Found Files with Symlink to Storage