【发布时间】:2020-05-24 08:40:34
【问题描述】:
我有C语言Downheap的源代码,它会在不违反堆属性的情况下向下移动元素(每个节点的值大于/小于或等于其父节点的值,最小/根的最大值元素。)在树的任何节点。
downheap(int k)
{
int temp, i;
temp = a[k];
while(k <= N/2)
{
i = 2*k;
if(i < N && a[i] < a[i+1]) i++;
if(temp > a[i]) break;
a[k] = a[i]; k = i;
}
a[k] = temp;
}
N 是数组a 的节点总数。我质疑这个程序是否可以从左到右下移节点来保持complete binary tree的属性?如何证明它,因为不存在右节点必须小于/大于左节点的属性。
【问题讨论】:
-
我觉得你搞错了。 (完整的)二叉树不需要任何形式的顺序。一棵树是二叉的,如果每个节点最多连接到三个边(一个用于父节点和两个子节点),就是这样。您不需要证明结果是二叉搜索树。无论如何,您将很难证明这一点,仅仅是因为堆没有该属性。
标签: c algorithm data-structures