У меня есть исходный код Downheap
на языке C, который будет перемещать элементы вниз, не нарушая свойства кучи (значение каждого узла больше / меньше или равно значению его родителя, с элемент минимального / максимального значения в root.) в любых узлах дерева.
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
. Я спросил, может ли эта программа перемещаться вниз по узлам слева направо, чтобы сохранить свойство полного двоичного дерева ? Как это доказать, потому что нет свойства, что правый узел должен быть меньше / больше левого.