- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
考虑下面的程序,它通过将节点分成两半来从上到下构建一个二叉树:
def split(n):
if n == 1:
return n
m = n//2
return [split(n-m)] + [split(m)]
例如:
for i in range(1, 10):
print(i, split(i))
打印:
1 1
2 [1, 1]
3 [[1, 1], 1]
4 [[1, 1], [1, 1]]
5 [[[1, 1], 1], [1, 1]]
6 [[[1, 1], 1], [[1, 1], 1]]
7 [[[1, 1], [1, 1]], [[1, 1], 1]]
8 [[[1, 1], [1, 1]], [[1, 1], [1, 1]]]
9 [[[[1, 1], 1], [1, 1]], [[1, 1], [1, 1]]]
是否可以自下而上构建完全相同的树?也就是说,给定 1
的数量,递归合并两个相邻节点,直到没有更多要合并的节点为止?
如果不是,是否可以从下往上构建高度完全相同的类似树?
为了说明这个过程,以6为例:
1, 1, 1, 1, 1, 1
[1, 1], 1, 1, 1, 1
[1, 1], 1, [1, 1], 1
[[1, 1], 1], [1, 1], 1
[[1, 1], 1], [[1, 1], 1]
[[[1, 1], 1], [[1, 1], 1]]
我怎么知道什么时候“跳过”一个节点以便稍后合并它?
PS:示例是用 Python 编写的,但语言无关紧要。
最佳答案
Let n be the initial size of the array
for(int i=0;i<log2(n);i++)
{
Let the current size of the array be m
for(int j=0;j<m/2;j++)
merge two adjacent elements of the array to form a new element
// After this some elements from first half would be single
for(int j=m/2;j<m;j++)
merge two adjacent elements of the array to form a new element.
// After this some elements from second half would be single
// The new updated array will now have ceil(n/2) elements
}
关于python - 自下而上构建二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55027222/
看起来很简单,但我没有任何成功。 非常简单,使用 AHK,我想从下往上获取工作表中最后一行的编号,其中包含一个值。我不能自上而下,因为有些行是空白的,所以必须自下而上。 我的代码遍历选定文件夹中的所有
元素的合并排序过程步骤是什么:20 47 15 8 9 4 40 30 12 17 我遇到过这个...... Pass1: |20 47| |8 15| |4 9| |30 40| |12 17| P
我正在尝试将脚本添加到我网站上的一个页面,这是一种过渡效果,其中 div 在 View 中从下向上移动。我成功地将完全相同的脚本添加到另一个页面并且它有效,但由于某种原因,它在另一个页面上不起作用。我
我正在使用 WIC (Windows Imaging Component) 来解码图像文件并访问像素数据。我试图找出像素顺序(即自下而上或自上而下)。 我用 IWICImagingFactory::C
我想在 Reporting Services 的文本框中垂直自下而上地显示我的文本。我已经可以通过转到文本框的 WritingMode 属性并切换到 'tb-rl' 使其自上而下,但没有自下而上的选项
我是一名优秀的程序员,十分优秀!