当前位置: 首页 > news >正文

【LeetCode】七、树、堆、图

文章目录

  • 1、树结构
  • 2、二叉树
  • 3、二叉树的遍历
  • 4、堆结构(Heap)
  • 5、堆化
  • 6、图

1、树结构

节点、根节点、叶子节点:

在这里插入图片描述

高度、深度、层三者的示意图:

在这里插入图片描述

2、二叉树

相比其他树,二叉树即每个节点最多两个孩子(两个分支):
在这里插入图片描述

如下图:满二叉树一定是完全二叉树,完全二叉树却不一定是满二叉树

在这里插入图片描述

补充:上面对满二叉树的定义不准确,满二叉树还要满足:所有的叶子节点在同一层

在这里插入图片描述

以上这个,虽然满足:除了叶子节点,每个节点都有两个孩子,但不满足所有叶子节点都在同一层,因此不是满二叉树。

3、二叉树的遍历

  • 前序遍历,即根节点在前:前左右
  • 中序遍历,即根节点在中:左中右
  • 后序遍历,即根节点在后:左右后
    在这里插入图片描述

如下:整个树看成三块,A、A的左子树、A的右子树,在两块子树里,继续按中序的左根右遍历,结果就是:D ⇒ B ⇒ E ⇒ A ⇒ F ⇒ C ⇒ G

在这里插入图片描述
在这里插入图片描述

同理,如果下面还有,那就继续分:

在这里插入图片描述

一句话,从根节点入手,把整个树看成左、根、右三大块,按左根右中序遍历,左右每块子树里,按子树的根节点继续分成左、根、右三大块,每块子树里依旧按照左根右中序遍历

4、堆结构(Heap)

堆即一种二叉树:完全二叉树。前面提到完全二叉树即从上到下、从左到右依次填满的二叉树,即可以左上有节点而右下无节点(图A、B),但:

  • 不能同一层左边无节点,但右边有节点(图C),这样不满足从左到右,不是完全二叉树
  • 不能同一层,左边有节点,但右边无节点,但下一层左边又有节点(图D),这样不满足从上到下,不是完全二叉树

在这里插入图片描述
堆有两个特点:

  • 首先得是一个完全二叉树
  • 其次,每个节点 >= 其所有孩子节点 (最大堆),或, 每个节点 <= 其所有孩子节点 (最小堆)

对最大堆,堆顶元素是整个堆的最大值,对最小堆,堆顶元素是整个堆的最小值

在这里插入图片描述
在这里插入图片描述

堆的时间复杂度:

在这里插入图片描述

比如删除一个最小堆的根节点:

在这里插入图片描述
干掉1以后,把右下角的7放上来,先保持完全二叉树的结构:

在这里插入图片描述
再向下比较,把7放到该放的位置。这是个最小堆,因此,先将7和最小的孩子节点2交换:

在这里插入图片描述
又发现7比孩子节点4和5打,因此,再把7和最小的孩子节点4交换,删除完成:

在这里插入图片描述

5、堆化

堆化,即把一组无序的数加到堆里去。可先把一组数转成完全二叉树,再将完全二叉树调整为最大堆或者最小堆。

如下,一个数组转为一个完全二叉树,其结果是唯一的(遍历数组,从上到下、从左到右的摆放),即0号元素当根节点,后面两个1、2号元素当根节点的左右子节点,3、4、5、6号元素分别当1、2号元素所在节点的左右子节点
在这里插入图片描述

将这个二叉树转为最小堆,核心思想是:把每个节点和其孩子节点进行对比,看每个节点是否满足:值小于等于任何它的一个子节点,不满足时,则把该节点和其最小的孩子节点交换

因为叶子节点没有子节点,所以从倒数第二层开始看:9和7两个节点,9符合条件,均小于其两个子节点,7则不符,因此,7和5交换:

在这里插入图片描述

交换完成,再往上看上一层:10 > 5 也 10 > 9,选更小的5这个节点交换:

在这里插入图片描述
同理,换完后,第二层不再满足最小堆,需要再交换,10 > 8 也有 10 > 7,选最小的7这个节点进行交换。

6、图

和树的父子关系相比,图则类似邻居关系。对于图,有一个度的概念(degree),如下,顶点上有两条边与其相连,该顶点的度为2
在这里插入图片描述
分类:

在这里插入图片描述
前面提到了顶点的度,对于有向图,则是:

  • 入度:指向该顶点的边的数量
  • 出度:从该顶点出发的边的数量

如下:丁节点,入度为2,出度为0

在这里插入图片描述
再说权重图:如下,求杭州到北京的最短路径

在这里插入图片描述

http://www.lryc.cn/news/385389.html

相关文章:

  • FPGA PCIe加载提速方案
  • Hi3861 OpenHarmony嵌入式应用入门--轮询按键
  • js,uni 自定义 时间选择器 vue2
  • 搜索引擎的原理与相关知识
  • React:tabs或标签页自定义右击菜单内容,支持内嵌iframe关闭菜单方案
  • Taro +vue3 中的微信小程序中的分享
  • 视频监控EasyCVR视频汇聚/智能边缘网关:EasySearch无法探测到服务器如何处理?
  • openlayer 鼠标点击船舶,打开船舶简单弹框
  • 数据挖掘常见算法(关联)
  • vue项目集成CanvasEditor实现Word在线编辑器
  • Redis Stream Redisson Stream
  • threadX netx 设置IP地址以及获取IP地址
  • 计算机毕业设计hadoop+spark+hive知识图谱医生推荐系统 医生数据分析可视化大屏 医生爬虫 医疗可视化 医生大数据 机器学习 大数据毕业设计
  • lammps已经运算结束,有数据忘记算:rerun 命令
  • CARLA自动驾驶模拟器基础
  • 华为HCIP Datacom H12-821 卷16
  • Python学习打卡:day17
  • Spring Cloud Gateway 与 Nacos 的完美结合
  • vue2 element ui 表单 动态增加表单项 表单项值不可重复 select多选
  • [数据集][目标检测]电力场景下电柜箱门把手检测数据集VOC+YOLO格式1167张1类别
  • OverTheWire Bandit 靶场通关解析(上)
  • 【Python实战因果推断】4_因果效应异质性4
  • 大模型推理知识总结
  • [笔记] keytool 导入服务器证书和证书私钥
  • 【2024-热-办公软件】ONLYOFFICE8.1版本桌面编辑器测评
  • C# 23设计模式备忘
  • STL中的迭代器模式:将算法与数据结构分离
  • TCP、UDP详解
  • 【脚本工具库】批量下采样图像(附源码)
  • Web渗透:文件包含漏洞