IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构--树&二叉树 -> 正文阅读

[数据结构与算法]数据结构--树&二叉树

? ? ? ? 是一种数据结构,它是由有限节点组成一个具有层次关系的集合,类似一颗倒置的大树。

当节点数为 0 时,该树被称为空树

树的节点

定义:使用树节点储存的每一个数据元素都被称为节点。

  • 根节点:每个节点只有一个前件,称为父节点,而没有前件的节点称为根节点。一颗非空的树有且仅有一个根节点
  • 子节点:每个节点可以有多个后件,称为该节点的子节点。
  • 叶子节点:没有后件的节点称为叶子节点。
  • 子树:树的其中一个节点及其下面所有节点构成的树称为子树。

度与层次

以下图树为例:

?

节点

  • 度:节点的度是指该节点的孩子数量。例如:A节点的度为3,B节点的度为2。
  • 层次:从根节点开始, 根为第 1 层, 根的子节点为第 2 层, 以此类推。例如:G节点在第三层。
  • 深度:根节点到该节点路径所包含的边数。例如:M节点的深度为3,F节点的深度为2。
  • 高度:该节点到叶子节点最长路径的边数。例如:D节点的高度为2。

  • 度:一颗树所包含所有节点的度的最大值。例如:该树的度为3。
  • 高度(深度):一棵树节点的最大层次。例如:该树的高度(深度)为3。

树的特点

  1. 一棵树中任意两个节点有且仅有一条路径相连,不包含回路。
  2. 一个有n个节点的树,一定有n-1条边。

二叉树

????????二叉树是一种特殊的有序树,二叉树的度为2。二叉树的子节点又被分为:左孩子节右孩子节点

? ? ? ?

????????如上图所示,左图树的度为2,为二叉树。右图树的度为3,非二叉树

? ? ? ? 其中在左图中,节点4为节点2的左孩子节点,节点5为节点2的右孩子节点。

二叉树的分类

? ? ? ? 二叉树被分为:满二叉树完全二叉树

满二叉树

? ? ? ? 概述:当一颗二叉树除叶子节点外,其余所有节点的度都为2,那么这颗树就被称为满二叉树。如下图所示:

?

性质:

  • 假设一颗满二叉树的高度为 n,那么该树的总节点数为:2^{n}-1。如上图:该树高度为4,则总节点数为15
  • 一颗满二叉树的第 i?层节点数为:2^{i-1}。如上图:第三层的节点数为4
  • 具有 x?个节点的满二叉树,它的叶子节点个数为:\frac{x+1}{2},高度(深度)为 \log_{2}{x+1}。如上图:该树总节点数为15,则该树的叶子节点数为8,高度(深度)为4

?完全二叉树

? ? ? ?概述:完全二叉树是指当二叉树除过最后一层为满二叉树且最后一层的节点从左到右依次分布,如下图所示:

性质:

  • 父节点与子节点的序号有对应关系。父节点为?i?时 ,左孩子节点为?2i?右孩子节点为?2i+1。例如上图中节点为2的左孩子节点为4,右孩子节点为5

二叉树的储存

? ? ? ? 二叉树的储存分为:链式储存和顺序储存

链式储存

? ? ? ? 二叉树的链式储存与链表类似,依靠指针管理节点之间的关联,不需要连续的存储空间,每个节点包括3个属性:数据(Data)、左孩子节点指针(Left)、右孩子节点指针(Right)

?顺序储存

? ? ? ? 二叉树的顺序储存,是指用顺序表(数组)储存,在顺序储存中,数组的每一个位置仅储存节点的数据,不需要储存节点的指针,而子节点的储存位置是根据完全二叉树的性质 “父节点为?i{\color{DarkGreen} }?时 ,左孩子节点为?2i{\color{DarkGreen} }?,右孩子节点为?2i+1{\color{DarkGreen} }?” 来确定下标的。例如:父节点在数组中的下标为i=3,那么该节点的左孩子节点在数组中的下标就是?2i=6,而右孩子节点在数组中的下标为?2i+1=7

? ? ? ? 顺序储存更适用与储存完全二叉树,而不适应与储存普通二叉树,原因是储存完全二叉树会使二叉树中元素在数组中连续储存,而储存普通二叉树容易在数组中出现空隙,从而导致内存浪费。如图所示:

?二叉树的遍历?

二叉树的遍历分为:前序遍历、中序遍历、右序遍历

  • 前序遍历也叫先序遍历,就是先输出根节点,在遍历左子树,最后遍历右子树:根节点=>左子树=>右子树
  • 中序节点是先递归中序遍历左子树,在输出根节点,最后递归中序遍历右子树:左子树=>根节点=>右子树
  • 后序节点是先递归后序遍历左子树,在递归后序遍历右子树,最后输出根节点:左子树=>右子树=>根节点

以下图为例:

  1. 前序遍历(根左右):ABDECFG
  2. 中序遍历(左根右):DBEAFCG
  3. 后序遍历(左右根):DEBFGCA

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 21:07:03  更:2022-10-08 21:11:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:25:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码