二叉树初次的整体过程

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);
}
相关推荐
juleskk1 分钟前
3.22 复试训练
算法
还不秃顶的计科生3 分钟前
力扣第84题:完全平方数
算法·leetcode·职场和发展
2301_776508727 分钟前
分布式系统监控工具
开发语言·c++·算法
暮冬-  Gentle°9 分钟前
C++与区块链智能合约
开发语言·c++·算法
愣头不青10 分钟前
78.子集
数据结构·算法
Oueii11 分钟前
C++中的代理模式实现
开发语言·c++·算法
3DVisionary14 分钟前
从微观损伤到宏观断裂:DIC非接触测量在复合材料可靠性验证中的前沿实践
人工智能·数码相机·算法·机器学习·3d·复合材料·dic技术
sonnet-102920 分钟前
拓扑排序的实现
java·c语言·开发语言·笔记·算法
米粒121 分钟前
力扣算法刷题 Day 20
算法·leetcode·职场和发展
Shining059625 分钟前
推理引擎系列(七)《InfiniLM》
人工智能·深度学习·算法·大模型·ai芯片·智能体·推理引擎