Skip to content

Commit c9b938d

Browse files
committedMay 11, 2024
更新 07. 树 相关图片、标题
1 parent d15d774 commit c9b938d

File tree

5 files changed

+68
-70
lines changed

5 files changed

+68
-70
lines changed
 

‎Contents/06.String/03.String-Multi-Pattern-Matching/01.Trie.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
55
例如下图就是一棵字典树,其中包含有 `"a"``"abc"``"acb"``"acc"``"ach"``"b"``"chb"` 这 7 个单词。
66

7-
![](https://qcdn.itcharge.cn/images/20220210142321.png)
7+
![字典树](https://qcdn.itcharge.cn/images/20240511165918.png)
88

99
从图中可以发现,这棵字典树用边来表示字母,从根节点到树上某一节点的路径就代表了一个单词。比如 $1 \rightarrow 2 \rightarrow 6 \rightarrow 10$ 表示的就是单词 `"acc"`。为了清楚地判断某节点路径是否表示一个单词,我们还可以在每个单词对应路径的结束位置增加一个结束标记 $end$(图中红色节点),表示从根节点到这里有一个单词。
1010

@@ -201,7 +201,7 @@ class Trie: # 字典树
201201

202202
例如下图,当我们输入「字典树」后,底下会出现一些以「字典树」为前缀的相关搜索内容。
203203

204-
![](https://qcdn.itcharge.cn/images/20220210134829.png)
204+
![字典树的应用](https://qcdn.itcharge.cn/images/20220210134829.png)
205205

206206
这个功能实现的基本原理就是字典树。当然,像 Google、必应、百度这样的搜索引擎,在这个功能能的背后肯定做了大量的改进和优化,但它的底层最基本的原理就是「字典树」这种数据结构。
207207

‎Contents/07.Tree/01.Binary-Tree/01.Binary-Tree-Basic.md

+14-16
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
77
之所以把这种数据结构称为「树」是因为这种数据结构看起来就像是一棵倒挂的树,也就是说数据结构中的「树」是根朝上,而叶朝下的。如下图所示。
88

9-
![](https://qcdn.itcharge.cn/images/20220221091603.png)
9+
![](https://qcdn.itcharge.cn/images/20240511171215.png)
1010

1111
「树」具有以下的特点:
1212

@@ -17,9 +17,7 @@
1717

1818
如下图所示,红色节点 $A$ 是根节点,除了根节点之外,还有 $3$ 棵互不相交的子树 $T_1(B, E, H, I, G)$、$T_2(C)$、$T_3(D, F, G, K)$。
1919

20-
![](https://qcdn.itcharge.cn/images/20220218104556.png)
21-
22-
20+
![树与子树](https://qcdn.itcharge.cn/images/20240511171233.png)
2321

2422
### 1.2 树的相关术语
2523

@@ -29,7 +27,7 @@
2927

3028
**「树的节点」** 由一个数据元素和若干个指向其子树的树的分支组成。而节点所含有的子树个数称为 **「节点的度」**。度为 $0$ 的节点称为 **「叶子节点」** 或者 **「终端节点」**,度不为 $0$ 的节点称为 **「分支节点」** 或者 **「非终端节点」**。树中各节点的最大度数称为 **「树的度」**
3129

32-
![](https://qcdn.itcharge.cn/images/20220218134918.png)
30+
![节点分类](https://qcdn.itcharge.cn/images/20240511171300.png)
3331

3432
- **树的节点**:由一个数据元素和若干个指向其子树的树的分支组成。
3533
- **节点的度**:一个节点所含有的子树个数。
@@ -41,7 +39,7 @@
4139

4240
一个节点的子树的根节点称为该节点的 **「孩子节点」**,相应的,该节点称为孩子的 **「父亲节点」**。同一个父亲节点的孩子节点之间互称为 **「兄弟节点」**
4341

44-
![](https://qcdn.itcharge.cn/images/20220218142604.png)
42+
![节点间关系](https://qcdn.itcharge.cn/images/20240511171311.png)
4543

4644
- **孩子节点(子节点)**:一个节点含有的子树的根节点称为该节点的子节点。例如图中 $B$ 是 $A$ 的孩子节点。
4745
- **父亲节点(父节点)**:如果一个节点含有子节点,则这个节点称为其子节点的父节点。例如图中 $B$ 是 $E$ 的父亲节点。
@@ -51,7 +49,7 @@
5149

5250
**「节点的层次」** 是从根节点开始定义,将根节点作为第 1 层,根的孩子节点作为第 2 层,以此类推,如果某个节点在第 $i$ 层,则其孩子节点在第 $i + 1$ 层。而父亲节点在同一层的节点互为 **「堂兄弟节点」**。树中所有节点最大的层数称为 **「树的深度」****「树的高度」**。树中,两个节点之间所经过节点序列称为 **「路径」**,两个节点之间路径上经过的边数称为 **「路径长度」**
5351

54-
![树的其他术语](https://qcdn.itcharge.cn/images/20231225174453.png)
52+
![树的其他术语](https://qcdn.itcharge.cn/images/20240511171325.png)
5553

5654
- **节点的层次**:从根节点开始定义,根为第 $1$ 层,根的子节点为第 $2$ 层,以此类推。
5755
- **树的深度(高度)**:所有节点中最大的层数。例如图中树的深度为 $4$。
@@ -78,7 +76,7 @@
7876
7977
下图就是一棵二叉树。
8078

81-
![](https://qcdn.itcharge.cn/images/20220221094909.png)
79+
![二叉树](https://qcdn.itcharge.cn/images/20240511171342.png)
8280

8381
二叉树也可以使用递归方式来定义,即二叉树满足以下两个要求之一:
8482

@@ -89,7 +87,7 @@
8987

9088
二叉树在逻辑上可以分为 $5$ 种基本形态,如下图所示。
9189

92-
![](https://qcdn.itcharge.cn/images/20220218164839.png)
90+
![二叉树的形态](https://qcdn.itcharge.cn/images/20220218164839.png)
9391

9492
### 2.2 特殊的二叉树
9593

@@ -109,7 +107,7 @@
109107

110108
我们可以来看几个例子。
111109

112-
![](https://qcdn.itcharge.cn/images/20220218173007.png)
110+
![满二叉树与非满二叉树](https://qcdn.itcharge.cn/images/20220218173007.png)
113111

114112
#### 2.2.2 完全二叉树
115113

@@ -127,7 +125,7 @@
127125

128126
我们可以来看几个例子。
129127

130-
![](https://qcdn.itcharge.cn/images/20220218174000.png)
128+
![完全二叉树与非完全二叉树](https://qcdn.itcharge.cn/images/20220218174000.png)
131129

132130
#### 2.2.3 二叉搜索树
133131

@@ -139,7 +137,7 @@
139137
140138
如图所示,这 $3$ 棵树都是二叉搜索树。
141139

142-
![](https://qcdn.itcharge.cn/images/20220218175944.png)
140+
![二叉搜索树](https://qcdn.itcharge.cn/images/20240511171406.png)
143141

144142
#### 2.2.4 平衡二叉搜索树
145143

@@ -153,7 +151,7 @@
153151
154152
如图所示,前 $2$ 棵树是平衡二叉搜索树,最后一棵树不是平衡二叉搜索树,因为这棵树的左右子树的高度差的绝对值超过了 $1$。
155153

156-
![](https://qcdn.itcharge.cn/images/20220221103552.png)
154+
![平衡二叉树与非平衡二叉树](https://qcdn.itcharge.cn/images/20220221103552.png)
157155

158156
### 2.3 二叉树的存储结构
159157

@@ -167,7 +165,7 @@
167165

168166
下图为二叉树的顺序存储结构。
169167

170-
![](https://qcdn.itcharge.cn/images/20220221144552.png)
168+
![二叉树的顺序存储结构](https://qcdn.itcharge.cn/images/20240511171423.png)
171169

172170
从图中我们也可以看出节点之间的逻辑关系。
173171

@@ -180,7 +178,7 @@
180178

181179
二叉树采用链式存储结构时,每个链节点包含一个用于数据域 $val$,存储节点信息;还包含两个指针域 $left$ 和 $right$,分别指向左右两个孩子节点,当左孩子或者右孩子不存在时,相应指针域值为空。二叉链节点结构如下图所示。
182180

183-
![](https://qcdn.itcharge.cn/images/20220221151412.png)
181+
![二叉链节点](https://qcdn.itcharge.cn/images/20240511171434.png)
184182

185183
二叉链节点结构的对应代码为:
186184

@@ -194,7 +192,7 @@ class TreeNode:
194192

195193
下面我们将值为 $[1, 2, 3, 4, 5, 6, 7]$ 的二叉树使用链式存储结构进行存储,即为下图所示。
196194

197-
![](https://qcdn.itcharge.cn/images/20220221153539.png)
195+
![二叉树的链式存储结构](https://qcdn.itcharge.cn/images/20240511171446.png)
198196

199197
二叉树的链表存储结构具有灵活、方便的特点。节点的最大数目只受系统最大可存储空间的限制。一般情况下,二叉树的链表存储结构比顺序存储结构更省空间(用于存储指针域的空间开销只是二叉树中节点数的线性函数),而且对于二叉树实施相关操作也很方便,因此,一般我们使用链式存储结构来存储二叉树。
200198

‎Contents/07.Tree/01.Binary-Tree/02.Binary-Tree-Traverse.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
如下图所示,该二叉树的前序遍历顺序为:$A - B - D - H - I - E - C - F - J - G - K$。
2626

27-
![](https://qcdn.itcharge.cn/images/20220222165249.png)
27+
![二叉树的前序遍历](https://qcdn.itcharge.cn/images/20240511171628.png)
2828

2929
### 2.1 二叉树的前序遍历递归实现
3030

@@ -104,7 +104,7 @@ class Solution:
104104

105105
如下图所示,该二叉树的中序遍历顺序为:$H - D - I - B - E - A - F - J - C - K - G$。
106106

107-
![](https://qcdn.itcharge.cn/images/20220222165231.png)
107+
![二叉树的中序遍历](https://qcdn.itcharge.cn/images/20240511171643.png)
108108

109109
### 3.1 二叉树的中序遍历递归实现
110110

@@ -186,7 +186,7 @@ class Solution:
186186

187187
如下图所示,该二叉树的后序遍历顺序为:$H - I - D - E - B - J - F - K - G - C - A$。
188188

189-
![](https://qcdn.itcharge.cn/images/20220222165218.png)
189+
![二叉树的后序遍历](https://qcdn.itcharge.cn/images/20240511171658.png)
190190

191191
### 4.1 二叉树的后序遍历递归实现
192192

@@ -273,7 +273,7 @@ class Solution:
273273

274274
如下图所示,该二叉树的后序遍历顺序为:$A - B - C - D - E - F - G - H - I - J - K$。
275275

276-
![](https://qcdn.itcharge.cn/images/20220222165158.png)
276+
![二叉树的层序遍历](https://qcdn.itcharge.cn/images/20240511171712.png)
277277

278278
二叉树的层序遍历是通过队列来实现的。具体步骤如下:
279279

‎Contents/07.Tree/02.Binary-Search-Tree/01.Binary-Search-Tree.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
99
如图所示,这 $3$ 棵树都是二叉搜索树。
1010

11-
![img](https://qcdn.itcharge.cn/images/20220218175944.png)
11+
![二叉搜索树](https://qcdn.itcharge.cn/images/20240511171406.png)
1212

1313
二叉树具有一个特性,即:**左子树的节点值 < 根节点值 < 右子树的节点值**
1414

0 commit comments

Comments
 (0)
Please sign in to comment.