【数据结构与算法】->数据结构->树与二叉树

Ⅰ 树(Tree)

A. 树的概念

树状图是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:
每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树

概念是很模糊的,意义不大,我用几棵树的图来做个直观表述,根据图我们再来理解树的概念。

在这里插入图片描述
树这个数据结构真的很像我们现实生活中的树,树里的每一个元素我们叫做 “节点”;用来连接相邻节点之间的关系,我们叫做 “父子关系”。

比如下面这棵树👇
Alt
C 节点就是 E节点的父节点,E 节点是 C 节点的子节点。E,F,G 这三个节点的父节点是同一个节点,所以它们之间互称兄弟节点。我们把没有父节点的节点叫做根节点,也就是上图中的 A 节点。我们把没有子节点的节点叫做叶子节点或者叶节点,也就是图中的 B,E,F,G 节点。

除此之外,关于“树”,还有三个比较相似的概念:高度(Height)、深度(Depth)、层(Level)。它们的定义如下:

在这里插入图片描述
我用一张图来说明一下这几个概念。

在这里插入图片描述
这几个概念我们可以从生活中出发来理解,一般我们说“高度”,都是自下而上度量,比如我们要度量第 10 层楼的高度,都是从地面开始算。所以树这种数据结构的高度也是一样,从底层开始计数,计数起点从 0 开始。

“深度”这个概念我们一般是从上往下看的,比如湖的深度,是从水平面开始量的,所以树的深度也是类似的,从根节点开始度量,计数起点也是 0 。

关于树我们可以很清晰地知道,树的存储结构是非线性表数据结构,是一对多的。

关于树,还有两个相关的概念需要了解:节点的度树的度

  • 节点的度:一个节点的子节点数量,称为该节点的度。

  • 树的度:树中节点的度的最大值。

以下面这个树为例,我们来搞清楚关于树的这几个名词。

在这里插入图片描述
树的度:4
树的层数:4
树中的节点总数:18
叶子节点数:11

B. 树的表达形式(存储结构)

由于树的每一个节点的最大子节点数量是不确定的,意味着其子节点数量不确定,因此,很难给出一个相对稳定的存储结构。我用 C 语言简单描述一下。

typedef struct TREE_NODE {
   
		USER_TYPE data;
		int childCount;
		struct TREE_NODE **children;
	}TREE_NODE;

USER_TYPE 根据用户需要存入的数据类型改变。
Alt
也可以用连续存储空间表示一棵树,如上面这颗可以表示为👇
在这里插入图片描述
左边一列为下标。

但是这样表示有个很大的缺陷࿱

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值