算法学习笔记(四)

一,二叉堆
二叉堆本质上是一种完全二叉树,分为两个类型
1.最大堆。
2.最小堆。

最大堆:最大堆的任何一个父节点的值,都大于或等于它左,右孩子节点的值。
最小堆:最小堆的任何一个父节点的值,都小于或等于它左,右孩子节点的值。
二叉堆的根节点叫做堆顶。最大堆的堆顶是整个堆中的最大元素,最小堆的堆顶是整个堆中的最小元素。

二,二叉堆的操作

1,插入节点
2,删除节点
3,构建二叉堆
此处以最小堆举例:
1.插入节点:当二叉堆插入节点时,插入位置时完全二叉树的最后一个位置。(最后一个位置!!)
此时。若新节点的父节点比新插入的节点大,根据二叉堆的性质,新插入的节点应该与父节点交换位置,使得 左右孩子节点比父节点小。然后继续与新节点的父节点做比较,若比父节点大的话,继续让新节点上浮,替换父节点的位置。

2.删除节点:删除节点的操作正好与插入节点的操作相反,比如删除的是堆顶的父节点,此时,就会将最后一个节点临时补到删除的节点的位置,然后让暂处于堆顶位置的节点与它的左右孩子进行比较,如果左右孩子中有比该节点小的值,则让该节点下沉,让左右孩子中小的那个节点上浮,以此类推,继续向下比较。

3,构建二叉堆

构建二叉堆就是把一个无序的完全二叉树调整为二叉堆,本质就是让所有非叶子节点依次“下沉"。
也就是说让完全二叉树的从左边最后一个节点处开始,让节点值依次与它的左右孩子节点进行比较,若小于其中最小的一个节点值,则该节点下沉,然后再进行同一层的其他节点,同样让节点值与它的左右孩子进行比较,若小于左右孩子中最小的那一个,则与最小的那个节点进行位置互换,也就是下沉。依次类推,经过几轮下沉操作后,就变成(构成)了一个最小堆。

本文中就不列举图表了。网上一搜有很多,纯用个人理解的大白话去理解描述。学习笔记敬请理解。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值