前言:
本篇博客主要了解什么是树,什么是二叉树,以及他们的概念和结构。
树(Tree)是一种非线性数据结构,是一种层次结构,其中每个节点都有一个父节点(除了根节点)和零个或多个子节点。
树(Tree)这个数据结构被称为“树”,是因为它的图形结构在形状上类似于自然界中的倒立的树。
考虑一棵真实的树,它有一个主干(树干),从树干上生长出许多分支,这些分支又分支出更小的枝叶,最终形成树冠。整体上,树的形状呈分层的结构,从根部到叶子的路径是有序的。
对比到数据结构中的树,树的根节点相当于树的根部,而节点和边的层次结构形成了树状的分支。这种分层结构反映了树的层次性质,每一层都代表了不同的层次或深度。
当判断一个数据结构是否是树时,可以考虑以下几个特点:
有且仅有一个根节点: 树结构只有一个根节点,所有的其他节点都通过边连接到根节点。
每个节点有零个或多个子节点: 每个节点可以有零个或多个子节点,这些子节点也是树的节点,形成了树的分支结构。
没有循环: 在树中不能存在环,即不能有从某个节点出发经过若干边回到该节点的路径。
节点之间是有序的: 树中的节点之间是有序的,即每个节点都有一个特定的位置,而子节点的顺序也是确定的。这个顺序通常是由添加或创建节点的顺序来确定的。
任意两节点间有唯一路径: 从树的根节点到任意一个节点,都有唯一的路径。
以下是一些非树的例子
树有很多种实现方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法
等。我们这里就简单的了解其中最常用的孩子兄弟表示法。
孩子兄弟表示法通常每个节点保存了指向其第一个孩子节点和其右兄弟节点的指针。
//兄弟表示法
struct TreeNode {
int data; //用于保存节点的数据
struct TreeNode* firstChild; //指向第一个孩子节点的指针
struct TreeNode* rightSibling; //指向右边一个兄弟节点的指针
};
结构图:
树在生活中有许多的应用:
文件系统: 文件系统通常以树的形式组织文件和目录。每个目录可以包含文件和子目录,形成了一个层次结构。
电子游戏中的场景图: 在游戏设计中,场景图常常以树结构表示游戏场景中的对象关系和层次。
组织结构: 公司或组织的层次结构可以使用树表示。每个节点可能代表一个部门,员工,或者项目。
决策树: 在机器学习中,决策树用于分类和回归分析,帮助模型做出决策。
图形学中的场景图: 用于表示3D场景中的对象关系,方便进行渲染和交互。
二叉树是树的一种特殊情况,其中每个节点最多有两个子节点,分别是左子节点和右子节点。
从上图可以看出:
注意:对于任意的二叉树都是由以下几种情况复合而成的:
如果你喜欢这篇文章,点赞👍+评论+关注??哦!
欢迎大家提出疑问,以及不同的见解。