树 的定义 与 性质

1 树的基本概念 根 + 子树

基本 组成是 树的基本信息 还有 人类的亲属关系

树是一种非线性的数据结构,由节点(Node)和边(Edge)组成。每个节点包含数据,并通过边与其他节点相连。树具有层次结构,最顶层的节点称为根节点(Root),没有子节点的节点称为叶节点(Leaf)。

节点的度 :子树的个数 或者孩子节点个数

简单来看就是 该节点的分叉数

特别区分

树的度 树中节点最大的度数 分支最多的数目

至少有棵子树 的度数 是 m

就是 MAX

子树(Subtree):树中任意节点及其后代构成的子结构。

注意 子树 可以理解为孩子 而且单独的一个节点 也是子树

子树 子集 之间是不可以相交的 不能成环

2

树的术语

根节点(Root):树的顶层节点,没有父节点。 只有一个

树根嘛 就是最底部 最开始的地方 抽象出来的数据结构是 一棵 倒过来的树

3 相对的关系 亲属关系

父节点(Parent)(双亲节点) :一个节点的直接上层节点。

就是 子树的根 比方说 B是A的父节点

理解 就是 从叶节点开始 每个节点都有一个向上的 边 但是 根节点 是没有的就是 N -1

子节点(Child)(孩子节点):一个节点的直接下层节点。

相反 A就是B的子节点

兄弟节点 :具有相同的父节点的节点 E,F

叶节点(Leaf)(终端节点) :没有子节点的节点,度为0的节点。如E,K,G,L,M,I,J等

就是说没有孩子,就是在最下面的底部的那些 。

分支节点 (非终端节点) : 度不为0的节点。 那些中间的节点 F H等等

祖先节点 就是

该节点的父亲 到 爷爷 最后 到根 路径上的 每个父亲节点都是

该节点的祖先节点 相反 的那个节点就是子孙节点

4

深度(Depth):从根节点到当前节点的路径长度。

公式总结

设:从根到最远叶子的路径边数为 e
树的深度=e+1 也就是 等于 最大层数

高度(Height):从当前节点到最远叶节点的路径长度。

树的高度 就是 根节点的 高度

层数 : 下面 是两种 相对的定义方式 只要在具体的实现时

树的层数 = 整棵树最大的节点层数。

逻辑自洽 步混淆 都是可以的

但是 推荐使用 将根节点 视作第一层的 那种

有节点时 就是第一层 空树 就是 0 这是大众的定义 建议

另一种 就是 把第一个节点 定义为 第0层

这是相对的关系 一般就是从以1开始

重点 区分是 整棵 树 和 某一节点

若根记为第 0 层:三者依然数值相等,只是整体数值都减 1。

单个节点的深度和高度不一定相等:
比如中间节点,深度是它离根的距离,高度是它离叶子的距离,二者通常不同;

但整棵树的高度 == 深度 == 层数 永远相等。

对于单独的一个节点来说

重点 就可以看作 以该节点为根节点的子树 来看 是可以的

1 高度 就是 从下往上数 这是第几个 从0开始数

也就是 该节点所在子树的层数

统一了这不就 转换为了树的高度啦

2 深度 就是 从海面往下数 从上到下的

就是 该节点所在的****层数

举个例子八

1 树的 高度 == 深度 == 层数 是 4

2 B 节点的深度是 2 第二层嘛

3 B 节点 的 高度是 3

B 子树 就是三层嘛

4 A节点的度 是 3 分叉数

A是根节点 所以树的度 也是 3

5 D节点的度 是 3 H节点的度是 2

M叉树 和 度为M的树

M叉树 只对 该树 最大的节点树 做了要求 或者 限制

而 度为m 则需要 有一个底线 就是 最少 都得有 这么 一个子树的节点的度数 是M

路径 注意 是从上到下

加上一个共同的 根节点 就把 一片森林 转化为了 一棵树

M 颗子树 构成的集合 就是 森林 多棵树 不相交 (并查集 )

---------------------------------------------------------------------------------------------

重点 概要

节点的度 父节点 子节点 叶节点 祖先节点

你可以用自己的话 讲解出来了吗?


树 的定义

递归 定义 的

任意 一棵树 都是如此 的

递归 简单理解是 拆解为 一件事 套娃

但是 最终 不可继续 套 或者 结束条件

绝对 不可以相交 子树 之间 不然就是 图 、

左孩子 右边兄弟的表示 方式 (天才之作)

三块区 第一个数据 后两个就是两个指针

理解为每一层的左边第一个节点就是 左边child 节点

接下来形式上 就是以该节点为头节点的 链表

最后的兄弟指针 都指向空 NULL

重点 发现

child 指向的是下一层的节点

brother 指向同一层 右边的节点 兄弟节点

指针本身存的是整个节点的地址,
只是人为规定了:

👉 child 用来找自己的大儿子,

brother 用来找旁边的亲兄弟。

指针只负责记录位置,语义用来定义关系。
地址 = 节点的位置;
child / brother = 节点之间的亲属关系。

类似的看作一颗目录树的结构

相关推荐
装不满的克莱因瓶1 小时前
实现矩阵的点积:从数学原理到 NumPy 实战
人工智能·线性代数·算法·机器学习·矩阵·numpy
梦想的颜色1 小时前
Docker 入门指南:从零开始掌握容器化技术
运维·服务器·vscode·python·算法·docker·云原生
cpp_25011 小时前
P10109 [GESP202312 六级] 工作沟通
数据结构·c++·算法·题解·洛谷·gesp六级
吴可可1231 小时前
CAD二次开发中多段线定点分割技巧
算法
ʚ希希ɞ ྀ1 小时前
全排列 --- 回溯
算法·leetcode·深度优先
玉树临风ives1 小时前
atcoder ABC 460 题解
数据结构·c++·算法
水无痕simon1 小时前
9 C语言的基础练习
c语言·开发语言·算法
8Qi81 小时前
LeetCode 124. 二叉树中的最大路径和(Hard)
算法·leetcode·二叉树·递归
And_Ii1 小时前
LeetCode 1. 两数之和 python
数据结构·算法·leetcode