二叉堆

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

复习完全二叉树定义:

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

二叉堆

最大堆(大顶堆)

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

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

最小堆(小顶堆)

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

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

二叉堆的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] 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值