| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【数据结构初阶】第六篇——初识二叉树(二叉树的基本性质+二叉树的顺序存储结构及实现) -> 正文阅读 |
|
[数据结构与算法]【数据结构初阶】第六篇——初识二叉树(二叉树的基本性质+二叉树的顺序存储结构及实现) |
文章目录树的基本概念及结构树的概念树(tree)是包含 n(n≥0) [2] 个节点,当 n=0 时,称为空树,非空树中条边的有穷集,在非空树中: 注意:树形结构中,子树之间不能有交集,否则就不是树形结构 树的相关概念
树的表示——左孩子右兄弟表示法树的表示方法有很多,由于树不是一种线性的结构,所以表示起来会显得有些复杂,最常用的就是左孩子右兄弟表示法。
这样一种表示方法是十分的精妙,可以很好地遍历到每一个节点。 二叉树的概念及性质二叉树的概念二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。
特殊的二叉树满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。 完全二叉树:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。 二叉树的性质
二叉树的顺序结构及实现二叉树的顺序结构普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。 可以看出,只有完全二叉树可以很充分地利用空间,普通二叉树会浪费很大的空间。 堆的概念及结构n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。
堆的实现堆的结构定义由于堆是用数组来进行存储的,所以这里的结构和顺序表有些类似,逻辑上是堆,物理上是一种数组的形式。
堆的初始化堆的初始化和顺序表的很相似基本上什么都不用做,只要指针置空,大小和容量置0即可。
向下调整算法从根节点开始的向下调整算法可以把它调整成一个小堆。向下调整算法有一个前提:左右子树必须是一个堆,才能调整。
向上调整算法向上调整算法就是在插入一个节点后为了使堆依旧保持原来的大堆或者小堆的一个调整算法。先将该节点与父亲节点比较,如果比父亲节点大就交换(原本是大堆)否则就不交换,直到交换到根节点为止。
堆的创建对于给定的一个数组,我们如何把他构建成大堆或者小堆呢?
第一种代码实现:
第二种代码实现:
堆的插入堆的插入和顺序表的尾插有些相似,要考虑扩容的问题,有一点不同的是堆在插入后要进行向上调整,也就是向上调整算法,保持原来的堆的性状。
堆的删除我们规定,堆的删除在头部进行,所以堆的删除也和顺序表的头删有些相似,要对大小进行断言,确保堆的大小不为0。但是堆不能直接在头部进行删除,这样会破坏堆的结构,又要重新建堆的时间复杂度是O(n)(后面会证明),这样就显得很麻烦。
堆顶数据直接返回第一个数据即可,但要确保堆不为空。
堆的元素个数直接返回size的大小即可。
判断堆是否为空利用逻辑表达式hp->size == 0进行判断,然后返回其值即可。
堆的销毁堆的销毁就是对动态申请的空间进行释放,防止内存泄漏,其实和顺序表的销毁很相似。
建堆的时间复杂度总结本篇博客就先到这里就结束了,下一篇博客我会跟大家聊一聊有关堆的顺序结构的应用的问题,堆排序和Top-K问题。喜欢的话,欢迎大家点赞支持和指正~ |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/9 1:32:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |