挑战408——数据结构(16)——树的概念

从这一篇开始,进入一种新的数据结构,称为树。其实在学习树之前我们就接触过这个结构。

树的概念

现在我们从一幅图中来了解一下什么是树状结构:
在这里插入图片描述
这幅图主要说明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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值