广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python数据结构之树的全面解读
  • 870
分享到

Python数据结构之树的全面解读

2024-04-02 19:04:59 870人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录前言🧡基本概念🌳树的定义🌲基本术语💚树的逻辑结构🍉前序遍历🍓后序遍历㇮

前言

提示:以下是本篇文章正文内容

🧡基本概念

🌳树的定义

树是n(n≥0)个结点的有限集合,n = 0时,称为空树,这是一种特殊情况

在任意一棵非空树中应满足:
①有且仅有一个特定的称为根的结点
②当n > 1时,其余结点可分为m(m > 0)个互不相交的有限集合T1,T2,…,Tm,其中每个集合本身又是一棵树,并且称为根结点的子树==

在这里插入图片描述

∅ 空树——结点数为0的树

非空树的特性:

有且仅有一个根节点
除了根节点外,任何一个结点都有且仅有一个前驱
每个结点可以有0个或多个后继

🌲基本术语

1.度

(1)结点的度:结点所拥有的子树的个数

(2)树的度:树中各结点度的最大值

在这里插入图片描述

A的度为3,同时也是树的度,B的度为2

2.叶子节点和分支节点
(1)叶子节点
度为0的节点,也称为终端结点

(2)分支节点
度不为0的节点,也称为非终端结点

在上图中,K,L,M,F,G,I,J均为叶子节点

3.双亲与孩子
(1)祖先结点:对于任何节点n ,它的祖先是位于根到节点n之间的路径上的节点

(2)子孙结点:一个结点含有的子树的根结点的子节点

在树中,如果有一条路径从节点x到节点y,则称x为y的祖先,y为x的子孙

(3)双亲结点(父节点):若一个结点含有子结点,则这个结点称为其子结点的父节点

(4)孩子结点:一个结点含有的子树的根结点称为该结点的子结点

(5)兄弟结点:具有相同父结点的结点互称为兄弟结点

(6)堂兄弟结点:如果树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点
B,C,D互为兄弟节点,E,G,I互为堂兄弟节点,B为E,F的父节点,而E,F为B的子节点

(4)树的深度
节点所在层数:根节点的层数为1,对于其他任何节点,若某节点在第K层,则其孩子节点在K+1层

树的深度:树中所有节点的最大层数,也称为高度
在上图中,树的深度为4

(5)树的类型
有序树:树中结点的各子树从左至右是有次序的,不能互换
无序树:树中结点的各子树从左至右是无次序的,可以互换

在这里插入图片描述

注:在数据结构中,一般的讨论的一般是有序树

(6)森林
森林是m(m≥0)棵互不相交的树的集合,m可为0,空森林

在这里插入图片描述

💚树的逻辑结构

树的遍历:从根节点出发,按照某种次序访问树中所有的节点,使得每个节点被访问一次且仅被访问一次

访问:抽象操作,可以是对节点进行的各种处理,这里简化为输出节点的数据

遍历的实质:树的结构(非线性结构) – > 线性结构

树通常有前序(根)遍历,后序(根)遍历,层序(次)遍历三种

🍉前序遍历

树的前序遍历操作定义为:若树为空,则空操作返回;否则:
(1)先访问根节点
(2)然后按照从左到右的顺序前序遍历根节点的每一颗子树

在这里插入图片描述

如图前序遍历序列:A–>B–>D–>E–>H–>I–>F–>C–>G

🍓后序遍历

树的后序遍历操作定义为:若树为空,则空操作返回;否则:
(1)先按照从左到右的顺序后序遍历根节点的每一颗子树
(2)最后访问根节点

如图后序遍历序列:D–>H–>I–>E–>F–>B–>G–>C–A

🍒层序遍历

树的层序遍历操作定义为:从树的第一层(即根节点)开始,自上而下的逐层遍历,在同一层中,按照从左到右的顺序对节点逐个访问

如图层序遍历序列:A–>B–>C–>D–>E–>F–>G–>H–>I

💜树的存储结构

实现树的存储结构,关键在于表示树中的节点之间的关系

🍀双亲表示法

基本思想:用一维数组来存储树的各个节点(一般按层序存储),数组中的一个元素对应树中的一个节点,包括节点的数据信息和节点的双亲在数组中的下标。

节点结构

在这里插入图片描述


struct Pnode
{
	DataType data; //数据域
	int parent;   //指针域,双亲在数组中的下标
}

树的双亲表示法实质上是一个静态链表
如图所示:

在这里插入图片描述

还可以将孩子节点或者兄弟节点的下标也进行存储

在这里插入图片描述

🍁孩子链表表示法

将结点的所有孩子放在一起,构成线性表

基本思想:把每个结点的孩子排列起来,看成是一个线性表,且以单链表存储,则n个结点共有n个孩子链表。这n个单链表共有n个头指针,这n个头指针又组成了一个线性表,为了便于进行查找采用顺序存储。最后, 将存放n个头指针的数组和存放n个结点的数组结合起来,构成孩子链表的表头数组

链表中的每个节点包含一个数据域和多个指针域,每个指针域指向该节点的一个孩子节点

方案一:
指针域的个数等于树的深度

在这里插入图片描述

缺点:浪费存储空间

在这里插入图片描述

方案二:
指针域的个数等于该结点的度

在这里插入图片描述

缺点:每个结点结构不一致

在这里插入图片描述

孩子节点

在这里插入图片描述


struct CTNode
{
	int child;
	CTNode *next; // 指向下一个孩子结点的指针
}

表头结点

在这里插入图片描述


struct CBNode
{
	DataType data;
	CTNode *firstChild; // 每个链表的头指针
}

存储结构

在这里插入图片描述

🍃双亲孩子表示法

在孩子链表中表头数组添加了节点的双亲结点

在这里插入图片描述

🍂孩子兄弟表示法

某节点的第一个孩子是唯一的,某一节点的右兄弟是唯一的,设置两个分别指向该节点的第一个孩子和右兄弟的指针

在这里插入图片描述


struct TNode
{
	DataType data;
	TNode *firstChild,*rightSib;
}

在这里插入图片描述

总结

提示:这里对文章进行总结:

到此这篇关于python数据结构之树的全面解读的文章就介绍到这了,更多相关Python 数据结构内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python数据结构之树的全面解读

本文链接: https://www.lsjlt.com/news/156215.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python数据结构之树的全面解读
    目录前言🧡基本概念🌳树的定义🌲基本术语💚树的逻辑结构🍉前序遍历🍓后序遍历㇮...
    99+
    2022-11-12
  • Python 数据结构之树的概念详解
    数据结构树简介 一、树简介 树(Tree)是一种抽象的数据结构,是一个数据的集合,集合中的数据组成了一个树状结构。例如上图,看起来像一棵倒挂的树,根朝上叶朝下。 树是由n(n>...
    99+
    2022-11-12
  • 用Python实现数据结构之树
    树是由根结点和若干颗子树构成的。树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的结点,所定义的关系称为父子关系。父子关系在树的结点之间建立了一个层次结构。在这种层次结构中有一个结点具有特殊的地位,这个结点称为该树...
    99+
    2023-01-30
    数据结构 之树 Python
  • C++数据结构AVL树全面分析
    目录概念AVL树的实现AVL树的节点定义AVL树的插入方法概述平衡因子的调节插入代码实现AVL树的查找AVL树的删除方法概述平衡因子的调节删除代码如下AVL树的测试代码总结⭐️博客代...
    99+
    2022-11-12
  • C++数据结构红黑树全面分析
    目录概念和性质红黑树的实现红黑树节点定义红黑树结构定义红黑树的插入方法概述调整节点颜色插入代码实现红黑树的删除方法概述调整颜色删除代码实现红黑树的查找红黑树的验证AVL树和红黑树的比...
    99+
    2022-11-13
  • Java数据结构之线段树详解
    目录介绍代码实现线段树构建区间查询更新总结介绍 线段树(又名区间树)也是一种二叉树,每个节点的值等于左右孩子节点值的和,线段树示例图如下 以求和为例,根节点表示区间0-5的和,左孩...
    99+
    2022-11-13
  • 数据结构之链式二叉树详解
    目录🍏1.二叉树的遍历🍏1.1前序遍历1.2中序遍历1.3后序遍历1.4层次遍历 🍎2.链式二叉树的实现🍎2.1二叉树的创建2.2前序遍历2.3中序遍历2.4后序遍历2.5...
    99+
    2023-05-16
    C语言链式二叉树 数据结构链式二叉树 C语言 数据结构
  • C++数据结构之AVL树的实现
    目录1.概念(1)二叉搜索树的缺点(2)定义节点2.插入(1)拆分(2)找节点与插节点(3)更新平衡因子与旋转3.判断4.完整代码及测试代码完整代码测试代码1.概念 (1)二叉搜索树...
    99+
    2022-11-13
  • C语言数据结构之二叉树详解
    目录1. 树概念及结构1.1树概念1.2树的表示2. 二叉树概念及结构2.1概念2.2数据结构中的二叉树2.3特殊的二叉树2.4二叉树的存储结构2.5二叉树的性质3. 二叉树顺序结构...
    99+
    2022-11-13
  • 详解Java数据结构之平衡二叉树
    目录什么是二叉搜索树平衡二叉搜索树平衡二叉搜索树建树程序计算每个节点的高度计算每个节点的平衡因子合并二叉树旋转调整函数整体代码什么是二叉搜索树 简单来说,就是方便搜索的二叉树,是一种...
    99+
    2022-11-13
  • Java数据结构之二叉搜索树详解
    目录前言性质实现节点结构初始化插入节点查找节点删除节点最后前言 今天leetcode的每日一题450是关于删除二叉搜索树节点的,题目要求删除指定值的节点,并且需要保证二叉搜索树性质不...
    99+
    2022-11-13
  • python数据结构之面向对象
    目录1. 面向对象编程2. 构建类3. 继承3.1 继承案例前文学习: python数据结构:数据类型.python数据结构输入输出及控制和异常. 今天我们来学习面向对象编程,面向对...
    99+
    2022-11-12
  • Python数据结构之图的存储结构详解
    一、图的定义 图是一种比树更复杂的一种数据结构,在图结构中,结点之间的关系是任意的,任意两个元素之间都可能相关,因此,它的应用极广。图中的数据元素通常被称为顶点 ( V e r t ...
    99+
    2022-11-12
  • C++数据结构之红黑树的实现
    目录一、什么是红黑树二、红黑树的约定三、红黑树vsAVL四、红黑树的实现1.找到插入的位置2.控制平衡3.测试代码五、完整代码1.test.c2.RBTree.h一、什么是红黑树 红...
    99+
    2022-11-13
    C++ 数据结构 红黑树 C++ 红黑树
  • java数据结构之树的示例分析
    这篇文章主要介绍java数据结构之树的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!树定义和基本术语定义树(Tree)是n(n≥0)个结点的有限集T,并且当n>0时满足下列条件:(1)有且仅有一个特定的称为根...
    99+
    2023-05-30
    java
  • Python数据结构之栈详解
    目录0. 学习目标1. 栈的基本概念1.1 栈的基本概念1.2 栈抽象数据类型1.3 栈的应用场景2. 栈的实现2.1 顺序栈的实现2.1.1 栈的初始化2.2 链栈的实现2.3 栈...
    99+
    2022-11-13
  • C语言结构体的全方面解读
    目录前言一、结构体的声明与定义1.结构体的声明2.结构成员的类型3.结构体的定义二、初始化结构体三、访问结构体成员四、结构体嵌套五、结构体指针六、结构体传参总结前言 C语言提供了不同...
    99+
    2022-11-12
  • Java数据结构之平衡二叉树的实现详解
    目录定义结点结构查找算法插入算法LL 型RR 型LR 型RL 型插入方法删除算法概述实例分析代码完整代码定义 动机:二叉查找树的操作实践复杂度由树高度决定,所以希望控制树高,左右子...
    99+
    2022-11-13
  • Java数据结构之线段树中的懒操作详解
    目录一、问题提出二、区间更新三、区间查询四、实战1.问题描述2.输入3.代码4.测试一、问题提出 对于线段树,若要求对区间中的所有点都进行更新,可以引入懒操作。 懒操作包括区间更新和...
    99+
    2022-11-13
  • C++数据结构之二叉搜索树的实现详解
    目录前言介绍实现节点的实现二叉搜索树的查找二叉搜索树的插入二叉搜索树的删除总结前言 今天我们来学一个新的数据结构:二叉搜索树。 介绍 二叉搜索树也称作二叉排序树,它具有以下性质: 非...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作