首页 > 其他分享 >【数据结构】树

【数据结构】树

时间:2024-07-23 11:26:44浏览次数:13  
标签:结点 TreeNode int public 双亲 数据结构 节点

目录


在讲二叉树之前,我们先需要简单了解一下树的相关知识。

树的定义

树的定义如下:树(Tree)是n个节点的有限集。n=0时称为空树。在任意一颗非空树中:

  1. 有且仅有一个特定的称为根(Root)的节点;
  2. 当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1、T2、···、Tm。其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。
    树

注意事项

  • m>0时,子树的个数没有限制 ,但子树之间不能有交集,否则就不是树形结构。
  • n>0时根节点是唯一的,不可能存在多个根节点。

节点的分类

树的节点包含一个数据元素及若干个指向其子树的分支。
在将树的分类之前先介绍度概念:

  • 节点的度(Degree):节点拥有的子树数。
  • 树的度:树内各节点度的最大值。

分类:

  • 叶节点(终端节点):度为0的节点。
  • 分支节点(内部节点,非终端节点):度不为0的节点。

节点间的关系

关系如下:

  • 节点的子树的根称为该节点的孩子(Child),相应该节点称为孩子的双亲(Parent)。
  • 同一个双亲的孩子之间互称兄弟(Sibling)。
  • 节点的祖先是从根到该节点所经分支上的所有节点。
  • 以某节点为根的子树中的任一节点都称为该节点的子孙。

树的表示方法

树有多种表示方法。

双亲表示法

树这种结构除了根节点外,其余每个节点,不一定有孩子节点,但是一定有且仅有一个双亲节点。

假设一段连续空间存储树的节点,将根结点的parent值为-1,其余节点的parent存储双亲节点的下标。

public class Tree{
	public TreeNode [] elem;//节点数组
	public int r;//根的位置
	public int n;//节点个数
	static class TreeNode{
		int data;//节点数据
		int parent;//双亲位置
	}
}

孩子表示法

使用多重链表,每个节点有多个指针域,其中每个指针指向一颗子树的根节点。
由于树中每个节点的度是不一样的,所以有两种方式。

  • 方式一:指针域的个数就是树的度(节点度的最大值),这种方式浪费空间大。
  • 方式二:每个节点的指针域个数等于该节点的度。
public class Tree{
	public TreeNode []elem;//节点数组
	int r;//跟的位置
	int n;//节点数
	static class TreeNode{
		int child;
		TreeNode next;
	}
}

孩子兄弟表示法

任意一棵树,它的节点的第一个孩子如果存在就是唯一的,它的右兄弟如果存在也是唯一的。
因此我们使用两个指针,分别指向该节点的第一个孩子和此节点的右兄弟。

class TreeNode {
    int value; // 树中存储的数据
    Node firstChild; // 第一个孩子引用
    Node nextBrother; // 下一个兄弟引用
}

概念总结

关于树的重要概念总结如下:

  • 结点的度:一个结点含有子树的个数称为该结点的度;
  • 树的度:一棵树中,所有结点度的最大值称为树的度;
  • 叶子结点或终端结点:度为0的结点称为叶结点;
  • 双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;
  • 孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点;
  • 根结点:一棵树中,没有双亲结点的结点;
  • 结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推;
  • 树的高度或深度:树中结点的最大层次;
  • 非终端结点或分支结点:度不为0的结点;
  • 兄弟结点:具有相同父结点的结点互称为兄弟结点;
  • 堂兄弟结点:双亲在同一层的结点互为堂兄弟;
  • 结点的祖先:从根到该结点所经分支上的所有结点;
  • 子孙:以某结点为根的子树中任一结点都称为该结点的子孙;
  • 森林:由m(m>=0)棵互不相交的树组成的集合称为森林。

标签:结点,TreeNode,int,public,双亲,数据结构,节点
From: https://blog.csdn.net/yj20040627/article/details/140417446

相关文章

  • 高级数据结构ST表
    定义ST表(SparseTable,稀疏表)是用于解决可重复贡献问题的数据结构。"什么是可重复贡献问题?"可重复贡献问题是指对于运算$\operatorname{opt}$,满足$x\operatorname{opt}x=x$,则对应的区间询问就是一个可重复贡献问题。例如,最大值有$\max(x,x)=x$,gcd有$\operatorname{gc......
  • IEC 61850 样本值 SavPDU 类型的 pyasn1 数据结构是否正确?
    我是使用pyasn1的新手,正在尝试按照Berkeley发布的PyASN1程序员手册文档IEC61850-9-2第8.5.2节表14将SEQUENCE类型转换为python类模型SavPdu的编码定义为SavPdu::=SEQUENCE{noASDU[0]IMPLICITINTEGER(1..65535),......
  • 数据结构-线性表(单链表)
    线性表-链表顺序表的链式表示顺序表和链表链表链表实现初始化相关操作插入顺序表的链式表示顺序表和链表顺序表可以随机存取表中的任意元素,但插入和删除操作需要移动大量元素。链表不需要使用地址连续的存储单元,即不需要逻辑上相邻的元素在物理位置上也相邻,通......
  • 数据结构-绪论2(算法,时间复杂度)
    算法的基本概念算法是什么       程序=数据结构+算法算法的五个特性有穷性确定性可行性输入输出算法的复杂度时间复杂度算法时间复杂度事前预估算法时间开销T(n)与问题规模n的关系这里以一层,两层,多层循环为例一层循环for(inti=0;i<n;i++){i......
  • 《Java初阶数据结构》----1.<时间复杂度&空间复杂度计算>
    目录算法效率:一、时间复杂度的计算1.1时间复杂度的表示1.2常见时间复杂度大小排序 1.3计算示例冒泡排序的时间复杂度二分查找的时间复杂度 阶乘递归factorial的时间复杂度斐波那契递归的时间复杂度二、空间复杂度的计算冒泡排序的空间复杂度计算fibonacci的空间复......
  • 数据结构——堆(C语言版)
    树    树的概念:        树(Tree)是一种抽象数据结构,它由节点(node)的集合组成,这些节点通过边相连,把节点集合按照逻辑顺序抽象成图像,看起来就像一个倒挂着的树,也就是说数据结构中的树是根成朝上,叶子朝下。        树形结构中,⼦树之间不能有交集,否则就不......
  • 片集 - 数据结构 - 1
    欢迎来看“片”(的简介)由于-\(看片\)-生涯转瞬即逝,于是我选择对“\(片\)”进行一定的总结:相信你一定看懂了由于开始的时间有一点晚,就姑且认为我以后会慢慢补充吧......\(CF1270H\)\(Number\)\(of\)\(Components\)解:线段树首先我们可以发现连通块都是以区间的形式存在的......
  • 7.22数据结构
    笔记链表一.链表的引入1.1总结顺序表的优缺点    1)优点:能够直接通过下表进行定位元素,访问效率高,对元素进行查找修改比较快    2)不足:插入和删除元素需要移动大量的元素,效率较低    3)缺点:存储数据元素有上限,当达到MAX后,就不能再添加元素了、1.2链......
  • 【数据结构】:链表实现洗牌功能
    此操作包含的基本功能有:组牌:组建52张扑克牌四种花色:“♥️”,“♠️”,“⬛️”,“♣️”每种花色13张牌:1~13洗牌:将52张扑克牌打乱顺序发牌:给三个人每人发5张牌扩展功能:清牌:将每人手中牌按照面值进行从大到小排序Card类在此类中,我们将完成对每一张牌的构造类......
  • 数据结构与算法总结——线性表
    目录2线性表2.1线性表的定义2.2线性表的基本操作2.2顺序表2.2.1顺序表的定义2.2.2顺序表的基本操作2.3链式表2.3.1链表的定义2.3.2链表的分类2.3.3单向链表2.3.3.1结点设计2.3.3.2链表的初始化2.3.3.3数据的插入2.3.3.4数据的删除2.3.3.5销毁链......