树的介绍(C语言版)

前言

在数据结构中树是一种很重要的数据结构,很多其他的数据结构和算法都是通过树衍生出来的,比如:堆,AVL树,红黑色等本质上都是一棵树,他们只是树的一种特殊结构,还有其他比如linux系统的文件系统就是一棵树。下面让我们一起来学习一下树的结构和特点吧!

1.树的概念

树是一种非线性的数据结构,它是由n(n >= 0)个有限的节点组成的具有层次结构的集合,把它叫做树,是因为它看起来像一颗倒挂的树,也就是说它根朝上,而叶子朝下的。

》有一个特殊的节点 称为根节点,根节点没有前驱节点

》除了根节点外,其余节点被分为M(M>0)个相互不想交的集合T1,T2,T3,...Tm,其中每一个集合Ti(1 <= i <=m)又是一颗结构与树类似的子树。每棵子树的根节点有且只有一个前驱,可以有多个后继。

》因此树是递归定义的

注意:树的结构中,子树之间不能有交集,否则就不是树形结构

2.与树相关

**节点的度:**一个节点含有子树的个数,例如上图中A的度为6,D的度为1。

**叶子节点或者终端节点:**度为零的节点被称为叶子结点。例如H,I,P,Q。

**非终端节点或者分支节点:**度不为零的节点,上图中的:B,C,D,E...

**双亲节点或者父节点:**若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点。

**孩子节点或者子节点:**一个节点含有的子树的根节点称为该节点的子节点,如上图的B是A的孩子节点。

**兄弟节点:**具有相同父亲节点的节点互称为兄弟节点。

**树的度:**一棵树中,最大节点的度称为树的度,如上图树的度为6.

**节点的层次:**从根节点开始,根为第一层,根的子节点为第二层,以此类推。

**树的高度或者深度:**树中节点的最大层次,如上图树的高度为4.

堂兄弟节点: 双亲在同一层的节点互为堂兄弟;如上图:H,I互为堂兄弟**。**

**节点的祖先:**从根到该节点所经分支上的所有节点,如上图,A是所有节点的祖先。

**子孙:**以某节点为根的子树中的任意一节点都称为该节点的子孙。如上图A节点是所有节点的子孙。

**森林:**由M棵互不相交的树的集合称为森林。

3.树的表示方法

树的结构相对线性表就复杂多了,要存储起来很麻烦,既要保存值域,也要保存节点与节点之间的关系 ,实际中树的表示方法有很多种,如:双亲表示法,孩子表示法 ,孩子双亲保护法以及孩子兄弟保护法。在这里介绍最简单的孩子兄弟保护法

typedef int DataType;

struct Node

{

struct Node* _firstChild1;//第一个孩子节点

struct Node* _pNextBrother;//指向其下一个兄弟节点

DataType _data;//节点中的数据域

};

4.树的应用

树可以表示文件系统的目录树结构,如图:

相关推荐
要做朋鱼燕17 分钟前
【数据结构】用堆解决TOPK问题
数据结构·算法
秋难降1 小时前
LRU缓存算法(最近最少使用算法)——工业界缓存淘汰策略的 “默认选择”
数据结构·python·算法
Jayyih3 小时前
嵌入式系统学习Day19(数据结构)
数据结构·学习
DdduZe4 小时前
8.19作业
数据结构·算法
PyHaVolask4 小时前
链表基本运算详解:查找、插入、删除及特殊链表
数据结构·算法·链表
1白天的黑夜15 小时前
链表-2.两数相加-力扣(LeetCode)
数据结构·leetcode·链表
花开富贵ii5 小时前
代码随想录算法训练营四十六天|图论part04
java·数据结构·算法·图论
熬了夜的程序员5 小时前
【LeetCode】16. 最接近的三数之和
数据结构·算法·leetcode·职场和发展·深度优先
Miraitowa_cheems5 小时前
LeetCode算法日记 - Day 15: 和为 K 的子数组、和可被 K 整除的子数组
java·数据结构·算法·leetcode·职场和发展·哈希算法
_poplar_8 小时前
08.5【C++ 初阶】实现一个相对完整的日期类--附带源码
c语言·开发语言·数据结构·c++·vscode·算法·vim