|
|
|
@ -2,7 +2,7 @@
|
|
|
|
|
|
|
|
|
|
!!! question
|
|
|
|
|
|
|
|
|
|
给定一个二叉树的前序遍历 `preorder` 和中序遍历 `inorder` ,请从中构建二叉树,返回二叉树的根节点。
|
|
|
|
|
给定一个二叉树的前序遍历 `preorder` 和中序遍历 `inorder` ,请从中构建二叉树,返回二叉树的根节点。假设二叉树中没有值重复的节点。
|
|
|
|
|
|
|
|
|
|
![构建二叉树的示例数据](build_binary_tree_problem.assets/build_tree_example.png)
|
|
|
|
|
|
|
|
|
@ -44,10 +44,10 @@
|
|
|
|
|
<p align="center"> 表 <id> 根节点和子树在前序和中序遍历中的索引 </p>
|
|
|
|
|
|
|
|
|
|
| | 根节点在 `preorder` 中的索引 | 子树在 `inorder` 中的索引区间 |
|
|
|
|
|
| ------ | -------------------------------- | ----------------------------- |
|
|
|
|
|
| 当前树 | $i$ | $[l, r]$ |
|
|
|
|
|
| 左子树 | $i + 1$ | $[l, m-1]$ |
|
|
|
|
|
| 右子树 | $i + 1 + (m - l)$ | $[m+1, r]$ |
|
|
|
|
|
| ------ | ---------------------------- | ----------------------------- |
|
|
|
|
|
| 当前树 | $i$ | $[l, r]$ |
|
|
|
|
|
| 左子树 | $i + 1$ | $[l, m-1]$ |
|
|
|
|
|
| 右子树 | $i + 1 + (m - l)$ | $[m+1, r]$ |
|
|
|
|
|
|
|
|
|
|
请注意,右子树根节点索引中的 $(m-l)$ 的含义是“左子树的节点数量”,建议配合下图理解。
|
|
|
|
|
|
|
|
|
|