我想证明一个二元堆与节点正好有假设以下列方式构建堆,那么将保留 2片叶子:
通过percolate up插入每个新节点。这意味着必须在下一个可用子节点上创建每个新节点。我的意思是,孩子们从下到上,从左到右地被填充。例如,以下堆:
0
/ \
1 2
将有已建成的顺序为:0,1,2,(这些数字仅仅是索引,他们没有给出该节点所包含的实际数据的指示。)
这有两个重要含义:
没有完全填充级别k,在级别上将不存在任何节点
因为子级是从左到右构建的,所以在级别上的节点之间不能有“空白空间” ,或者类似以下情况:
0 / \ 1 2 / \ \ 3 4 6
(根据我的定义,这将是非法的堆。)因此,考虑该堆的一个好方法是堆的数组实现,其中数组的索引中不能有任何“跳转”。
因此,我认为归纳法可能是实现此目的的一种好方法……也许某些事情甚至需要处理n的奇数情况。例如,使用这样的事实进行归纳,即以这种方式构建的偶数堆必须具有一个带有偶数n的子节点的内部节点,而没有奇数n的此类节点。有想法吗?
@DaveClarke:不完全;链接的问题是对我们留给编辑的部分误解的结果。
—
拉斐尔
您是否尝试过归纳节点号。插入次数?
—
拉斐尔
@DaveClarke:为什么?恕我直言,这本身就是一个有效的问题。
—
拉斐尔