This commit is contained in:
krahets
2023-08-20 13:37:08 +08:00
parent 2e27ad1680
commit 44a8568356
32 changed files with 140 additions and 130 deletions

View File

@@ -13,7 +13,7 @@ status: new
<p align="center"> 图:构建二叉树的示例数据 </p>
### 判断是否为分治问题
### 1. &nbsp; 判断是否为分治问题
原问题定义为从 `preorder``inorder` 构建二叉树。我们首先从分治的角度分析这道题:
@@ -21,7 +21,7 @@ status: new
- **子问题是独立的**:左子树和右子树是相互独立的,它们之间没有交集。在构建左子树时,我们只需要关注中序遍历和前序遍历中与左子树对应的部分。右子树同理。
- **子问题的解可以合并**:一旦得到了左子树和右子树(子问题的解),我们就可以将它们链接到根节点上,得到原问题的解。
### 如何划分子树
### 2. &nbsp; 如何划分子树
根据以上分析,这道题是可以使用分治来求解的,但问题是:**如何通过前序遍历 `preorder` 和中序遍历 `inorder` 来划分左子树和右子树呢**
@@ -40,7 +40,7 @@ status: new
<p align="center"> 图:在前序和中序遍历中划分子树 </p>
### 基于变量描述子树区间
### 3. &nbsp; 基于变量描述子树区间
根据以上划分方法,**我们已经得到根节点、左子树、右子树在 `preorder``inorder` 中的索引区间**。而为了描述这些索引区间,我们需要借助几个指针变量:
@@ -67,7 +67,7 @@ status: new
<p align="center"> 图:根节点和左右子树的索引区间表示 </p>
### 代码实现
### 4. &nbsp; 代码实现
为了提升查询 $m$ 的效率,我们借助一个哈希表 `hmap` 来存储数组 `inorder` 中元素到索引的映射。