Skip to content

Commit

Permalink
更新 07. 树 相关图片、标题
Browse files Browse the repository at this point in the history
  • Loading branch information
itcharge committed May 11, 2024
1 parent d15d774 commit c9b938d
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 70 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
例如下图就是一棵字典树,其中包含有 `"a"``"abc"``"acb"``"acc"``"ach"``"b"``"chb"` 这 7 个单词。

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

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

Expand Down Expand Up @@ -201,7 +201,7 @@ class Trie: # 字典树

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

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

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

Expand Down
30 changes: 14 additions & 16 deletions Contents/07.Tree/01.Binary-Tree/01.Binary-Tree-Basic.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
之所以把这种数据结构称为「树」是因为这种数据结构看起来就像是一棵倒挂的树,也就是说数据结构中的「树」是根朝上,而叶朝下的。如下图所示。

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

「树」具有以下的特点:

Expand All @@ -17,9 +17,7 @@

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

![](https://qcdn.itcharge.cn/images/20220218104556.png)


![树与子树](https://qcdn.itcharge.cn/images/20240511171233.png)

### 1.2 树的相关术语

Expand All @@ -29,7 +27,7 @@

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

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

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

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

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

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

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

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

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

![](https://qcdn.itcharge.cn/images/20220221094909.png)
![二叉树](https://qcdn.itcharge.cn/images/20240511171342.png)

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

Expand All @@ -89,7 +87,7 @@

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

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

### 2.2 特殊的二叉树

Expand All @@ -109,7 +107,7 @@

我们可以来看几个例子。

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

#### 2.2.2 完全二叉树

Expand All @@ -127,7 +125,7 @@

我们可以来看几个例子。

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

#### 2.2.3 二叉搜索树

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

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

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

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

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

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

Expand All @@ -167,7 +165,7 @@

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

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

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

Expand All @@ -180,7 +178,7 @@

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

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

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

Expand All @@ -194,7 +192,7 @@ class TreeNode:

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

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

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

Expand Down
8 changes: 4 additions & 4 deletions Contents/07.Tree/01.Binary-Tree/02.Binary-Tree-Traverse.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

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

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

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

Expand Down Expand Up @@ -104,7 +104,7 @@ class Solution:

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

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

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

Expand Down Expand Up @@ -186,7 +186,7 @@ class Solution:

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

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

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

Expand Down Expand Up @@ -273,7 +273,7 @@ class Solution:

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

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

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
如图所示,这 $3$ 棵树都是二叉搜索树。

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

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

Expand Down
Loading

0 comments on commit c9b938d

Please sign in to comment.