基于二叉树的堆排序、优先队列、二叉查找树、平衡查找树、B树详解

一、二叉树的性质

  • 二叉树第i层上的结点数目最多为2^(i-1)
  • 深度为k的二叉树至多有2^k-1个结点
  • 在任意-棵二叉树中,若终端结点的个数为n0,度为2的 结点数为n2,则no=n2+1

二、二叉树的存储结构

1、顺序存储结构

数组的下标就是二叉树的结点位置(层次结构),比如结点A,在数组中就是位置0,B就是1,C就是2….,以此类推,所以第i个结点的在数组中的位置就是i(i从0开始),i的两个孩子结点在数组中的位置是2i+1和2i+2
顺序存储结构示意图

2、链式存储结构

二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。
链式存储结构

三、基于二叉树思想的堆排序

1、堆的存储

堆排序是一种选择排序。是不稳定的排序方法。时间复杂度为O(nlog2n)。特点是在排序过程中,将排序数组看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲节点和孩子节点之间的内在关系,在当前无序区中选择关键字最大(或最小)的记录。根结点下标为0时,下标为n的元素的子结点下标分别为2*n+1,2*n+2,其父结点下标为(n-1)/2,如图所示。(一些程序员喜欢用下标1表示根节点,下标为n的元素的子节点下标分别为2*n,2*n+1,父节点下标为 floor(n/2)
堆的存储

2、堆排序的实现

堆排序可以分为两个阶段:堆构造和堆排序(下沉排序)

构造初始堆

初始化堆的时候是对所有的非叶子结点进行筛选。最后一个非终端元素的下标是[n/2]向下取整,所以筛选只需要从第[n/2]向下取整个元素开始,从后往前进行调整。比如,给定一个数组,首先根据该数组元素构造一个完全二叉树。然后从最后一个非叶子结点开始,每次都是从父结点、左孩子、右孩子中进行比较交换,交换可能会引起孩子结点不满足堆的性质,所以每次交换之后需要重新对被交

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值