【发布时间】:2021-07-10 03:27:07
【问题描述】:
我有一个长度为n 的有序数组,其中包含从1 到n 的连续整数元素。在为这个数组构造完红黑树之后,我可以使用标准的广度优先搜索方法按级别顺序遍历这棵树。
我的问题是,给定任意一个n <= 100000000(对应一个从1到n的连续整数元素的有序数组),是否可以绕过树的构造,直接返回层级顺序?
【问题讨论】:
-
该数据可能的红背树不是唯一的:可能有很多这样的树,因此级别顺序不是唯一定义的。
-
也许我需要明确说明这一点,但我只对构建平衡树的级别顺序感兴趣。所以第一层是数组的中间元素,第二层是剩余数组左半边的中间元素,然后是右半边的中间元素,依此类推。如果我们需要找到具有偶数个元素的数组的中间,那么您将选择中心左侧的第一个元素。
-
对于相同的输入仍然可以有不同的平衡树,因此级别会有所不同。例如,如果 n=4,则级别顺序可以是以下任何一个:[2][1,3][4] 或 [2][1,4][3] 或 [3][2,4][ 1] 或 [3][1,4][2]
-
鉴于偶数的规则,你的意思是你只考虑平衡树,其中没有子树是左重的,即对于 n=4 你会想要 [2][1,3][ 4]?
-
是的,对于
n=4,我希望电平顺序产生[2][1, 3][4],不过,我只想返回一个带有[2, 1, 3, 4]的平面数组。对于n=10,我希望水平顺序在展平时为[5][2, 8][1, 3, 6, 9],[4, 7, 10]或[5, 2, 8, 1, 3, 6, 9, 4, 7, 10]
标签: algorithm binary-search-tree breadth-first-search