| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构之二叉树 -> 正文阅读 |
|
[数据结构与算法]数据结构之二叉树 |
1.树概念及结构 1.树概念及结构 1.1树的概念 1.2 树的相关概念? 1.3 树的表示? 1.4 树在实际中的运用(表示文件系统的目录树结构)? 2.二叉树概念及结构 2.二叉树概念及结构 2.2现实中的二叉树: ?2.3?特殊的二叉树:? 2.4 二叉树的性质? 一些完全二叉树的小练习: 2.5 二叉树的存储结构? 二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构。 3.1?堆的概念及结构 数据结构里面也有堆和栈,他跟操作系统对内存划分里面的栈和堆,没有关系。他们是两个学科里面不同的物种。 ? 3.2?堆的实现? 3.2.1 堆向下调整算法 小堆实现的办法: 3.2.2堆的创建 3.2.3 建堆时间复杂度? 3.2.4 堆的插入(向上调整法) 3.2.5 堆的删除 删除堆是删除堆顶的数据,将堆顶的数据根最后一个数据一换,然后删除数组最后一个数据,再进行向下调整算法 3.2.6 堆的代码实现 Heap.h teat.c Heap.c 3.4 堆的应用 3.4.1?TOP-K问题 ?验证topK问题代码: topK.h ?topK.c test.c ?3.4.2?堆排序 升序代码:? 思考? ?? 这里采用的向下调整的建堆方式为什么选择从最后一个非空节点开始到第一个结束呢,而不采用从第一个开始到最后一个非空节点结束呢? 这里一定要注意这两种向下调整方式带来的效果会有非常明显的不同,从第一个开始节点开始到最后一个非空节点结束显然无法获得预想堆结果。 这里我们用一组数据来看看这两种向下调整的建堆方式产生的差别,这里大堆和小堆分别说明 4.二叉树链式结构的实现 4.1 前置说明 在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作.此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头再来研究二叉树真正的创建方式。 ? 按照此图来建立一个二叉树: 4.2二叉树的遍历 前序遍历结果:1 2 3 4 5 6 递归图解思路: ? 4.2.2 层序遍历 层序遍历:除了前序遍历、中序遍历、后序遍历外,还可以对二叉树进行层序遍历。设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。 ? 4.3 节点个数以及高度等 下面几个问题中主要采用分治的思想。 分治:通常采用递归的思想,分而治之,化繁为简。 就好比一个学校的校长,一个企业的领导,一个人如何去合理有效高效地管理好这么多手下,那么我们就需要一层一层地去交给下面的人去执行,就好比这里的二叉树概念一样。 ?最优求节点法: 最优求叶子节点法: ?最优求第k层节点个数法: ??递归图解思路: 最优二叉树深度/高度:
二叉树查找值为x的节点: 递归图解思路: ? 4.4?二叉树的创建和销毁 判断二叉树是否是完全二叉树 ?二叉树的销毁: ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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:38:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |