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