二叉树-堆

目录

二叉树的顺序结构

堆概念及结构

堆的性质

堆的实际意义

选择题


二叉树的顺序结构

普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段

  • 物理结构:数组
  • 逻辑结构:完全二叉树
  • 完全二叉树一层一层的存储到数组里面。(堆实现需要二者结合理解)
  • 堆——数据结构 完全二叉树
  • 堆——c语言/操作系统/内存区域的划分
  • 有序数组一定是堆,堆不一定是有序数组

堆概念及结构

如果有一个关键码的集合K = { , , ,…, },把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足: <= 且 <= ( >= 且 >= ) i = 0,1,2…,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。

  • 大堆 parent <= child
  • 小堆 parent >= child
  • child之间无大小关系

堆的性质

  • 堆中某个节点的值总是不大于或不小于其父节点的值
  • 堆总是一棵完全二叉树
  • 有序数组一定是堆,堆不一定是有序数组
  • 完全二叉树一层一层存储到数组内
  • 满二叉树or完全二叉树
  • 父子节点间下标关系parent=(child-1)/2  (注意:除法)
  • leftchild=parent*2+1
  • rightchild=parent*2+2
  • *2:到孩子层面
  • +1:奇数(左孩子)
  • +2:偶数(右孩子)
  • 完全二叉树的高度h=log2(N+1)  N节点数

 

堆一般,是数组数据看做一棵完全二叉树

小堆要求:任意一个父亲 <= 孩子

大堆要求:任意一个父亲 >= 孩子 

堆的实际意义

 

  • 堆排序 O(N*logN)
  • Top-K问题:从n个未排序的数中得到的最大的k个数(最小的k个数做法也相似)
  • 搜索二叉树
  • AVL树/红黑树
  • 不在和前面的顺序表/链表/栈一样是存储数据,增删查改而已了!!

选择题

1.下列关键字序列为堆的是:()A
A 100,60,70,50,32,65
B 60,70,65,50,32,100
C 65,100,70,32,50,60
D 70,65,100,32,50,60
E 32,50,100,70,65,60
F 50,100,70,65,60,32

 2.已知小根堆为8,15,10,21,34,16,12,删除关键字 8 之后需重建堆,在此过程中,关键字之间的比较次
数是()。C
A 1
B 2
C 3
D 4

 3.一组记录排序码为(5 11 7 2 3 17),则利用堆排序方法建立的初始堆为
A(11 5 7 2 3 17)
B(11 5 7 2 17 3)
C(17 11 7 2 3 5)
D(17 11 7 5 3 2)
E(17 7 11 3 5 2)
F(17 7 11 3 2 5)

4.最小堆[0,3,2,5,7,4,6,8],在删除堆顶元素0之后,其结果是()C
A[3,2,5,7,4,6,8]
B[2,3,5,7,4,6,8]
C[2,3,4,5,7,8,6]
D[2,3,4,5,6,7,8] 

  • 把删除的对顶元素和最后一个元素交换
  • 删除最后一个元素
  • 然后向下调整,交换

🙂感谢大家的阅读,若有错误和不足,欢迎指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐唐思

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值