二叉堆

本文介绍了二叉堆的基本概念,包括最大堆(大顶堆)和最小堆(小顶堆)。最大堆中,父节点的值大于或等于其子节点;而最小堆中,父节点的值小于或等于其子节点。二叉堆在Golang中的实现采用了顺序存储,以最小堆为例,涵盖了构建、添加和删除元素的操作,这些知识点对于后续的学习至关重要。
摘要由CSDN通过智能技术生成

二叉堆,本质上是一种完全二叉树。只是在完全二叉树地基础上有一些其他地特性

复习完全二叉树定义:

只要最后一个节点之前地所有非叶子节点都存在左孩子和右孩子,且所有叶子节点在同一层次上地二叉树就叫做完全二叉树。

二叉堆

最大堆(大顶堆)

最大堆地任何一个父结点的值。都大于或等于它左孩子或者右孩子地值

二叉堆的根节点叫做堆顶,最大堆的堆顶是整个堆中的最大元素

最小堆(小顶堆)

最大堆地任何一个父结点的值。都小于或等于它左孩子或者右孩子地值

二叉堆地根节点叫做堆顶,最小堆的堆顶是整个堆中的最小元素

二叉堆的golang实现

二叉堆的所有节点都存储在数组中

二叉堆也是一种完全二叉树,存储方式是顺序存储,不会浪费空间

以最小堆为例:
包含构建最小堆,添加元素及删除元素

package main

import "fmt"

type Heap struct {
   
	slice  []int
	length int
}

// 二叉堆尾节点的上浮操作 O(logn)
func (m *Heap) upAdjust() {
   
	if m.length <= 1 {
   
		return //最多一个节点,不用操作
	}
	childIndex := m.length - 1          //尾节点索引
	parentIndex := (childIndex - 1) / 2 //尾节点的父节点索引
	temp := m.slice[childIndex]
	for childIndex > 0 && temp < m.slice[parentIndex] {
   
		m.slice[childIndex] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值