首页 > 编程知识 正文

数据结构树和,树的定义数据结构

时间:2023-05-03 22:55:06 阅读:202029 作者:3913

树的递归结构

在正式学习树(tree)这个结构之前,我们实际上已经接触过这个结构了,堆(heap)实际上就是一个特殊的树,一棵完全二叉树。现在我们从一幅图中来了解一下什么是树状结构:

这幅图主要说明cart这个单词的所有可能的组合结构,按照常理,我们先考虑三个字母的排列,然后由三个字母的排列中再进行拆分,最后重复拆分直到仅有一个字母。这个套路是不是很像我们之前学过的devide —— conquer算法?对的,这是一个递归的过程,也是计算机最喜欢的算法。所以树状结构是很符合计算机逻辑的一种数据结构。
好,那么问题来了,在计算机中,什么叫树呢?

什么叫树?

树,是节点(note)的集合(A tree is a collection of nodes),记得高中学集合的时候,集合是允许一个元素都没有的集合,称为空集。那么树是不是允许一个节点都没有的呢?是的,一个节点都没有的树,我们称之为空树(empty tree)。如果不是空的,则会存在“根”节点 r 和零个或更多非空子树T1,T2,…,Tk,它们的根由来自r的有向边连接。什么叫有向边?如果不想向离散数学学的那么深入,可以理解为箭头。
下面我们用图的方式来说明树内部的关系:

根节点(root):一棵树只有一个根节点,所有的节点都在该节点的下面。尝试把图倒过来看,就可以看成一个我们日常见到的树的根部。在这里显然 A 字母就是这棵树的根节点。子节点(child)与父节点(parent):一个节点,它对应的下面有边连着的节点,那么被连着的节点就是这个节点的子节点,也叫孩子。那么这个节点叫做被连接的节点的父亲。很难转过来?那么就看看这图吧。B 被 A 连着,所以B是A的一个孩子,同理 C D E等等这一行都是A的孩子。我们再看看F,它连着K L M 同时被A连着,那么F是A的一个孩子,同时又是K L M的父亲树叶(leaves):树叶就是些没有孩子的节点,比如 B, C ,D等等。就比如下图的绿色部分
兄弟(siblings):按照我们的理解,同一个父母生的当然就是兄妹啦。看图,颜色相同的都为兄妹:

我们同样可以定义从父亲到他的孩子的路径(path)。下面的例子,我们就取上图的树的一部分(一个子树),作为例子:

比如A -> O的路径为 A -> E -> J -> O,它的长度为3(实际为它的边树,图中红色部分)。
- 节点的深度(depth of a node):节点的深度是指节点到树根的长度,看上图,我们可以轻易的知道,J节点的深度为2(可以按上面的理解,路径为A -> E -> J,边长为2)。显然此时的根节点的深度为0.
- 节点的高度(height of a node):高度是从节点到叶子的最长路径。比如节点F的高度为1.显然所有叶子的高度为0。
- 树的高度(height of a tree):树的高度是根的高度(显然在这图中,树的高度是3,A -> O)。

树的特点

现在让我们来思考一下,树有啥特点。
1. 按照正常逻辑,一个人不能同时有两个父亲,所以树也是一样的,下面的两个图就说明了这个问题:

2. 一棵正常的树,它的树枝是不会长成一个圆的,所以,树中是不可能出现环形的,下面的图就说明了这个问题,红色箭头部分就构成了一个环,它们都不是一棵树:

下一篇介绍一下树的储存结构与遍历方式

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。