1.计算二叉树节点的范围

2.计算用父亲下标找出儿子的下标,用儿子的下标找出父亲的下标方法

2.向下调整算法
cpp
void AdjustUp(HPDataType*a,int child)
{
int parent = (child - 1) / 2;
while (0 < child)
{
if (a[child] < a[parent])
{
HPDataType* tem = a[child];
a[child] = a[parent];
a[parent] = tem;
child = parent;
parent = (child - 1) / 2;
}
else
{
break;
}
}
}
5.整体代码
cpp
#pragma once
#include<stdio.h>
#include<assert.h>
#include<stdbool.h>
#include <stdlib.h>
typedef int HPDataType;
typedef struct Heap
{
HPDataType*a;
int size;
int capacity;
}HP;
void HeapInit(HP* php);
void HeapDestroy(HP* php);
void HeapPush(HP* php, HPDataType x);
#include"Heap.h"
void HeapInit(HP* php)
{
assert(php);
php->a = NULL;
php->capacity = 0;
php->size = 0;
}
void HeapDestroy(HP* php)
{
free(php->a);
}
void AdjustUp(HPDataType*a,int child)
{
int parent = (child - 1) / 2;
while (0 < child)
{
if (a[child] < a[parent])
{
HPDataType* tem = a[child];
a[child] = a[parent];
a[parent] = tem;
child = parent;
parent = (child - 1) / 2;
}
else
{
break;
}
}
}
void HeapPush(HP* php, HPDataType x)
{
assert(php);
if (php->size == php->capacity)
{
int newCapacity = php->capacity == 0 ? 4 : php->capacity * 2;
HPDataType* tem = (HPDataType*)realloc(php->a, newCapacity * sizeof(HPDataType));
if (tem == NULL)
{
perror("realloc fale");
return;
}
php->a = tem;
php->capacity = newCapacity;
}
php->a[php->size] = x;
php->size++;
//向上调整,要把结构体的数组和数组的最后一位元素传过去当孩子
AdjustUp(php->a, php->size - 1);
}