This commit is contained in:
krahets
2026-08-18 03:09:22 +08:00
parent d8c34d88b5
commit ba5285949b
108 changed files with 237 additions and 229 deletions
@@ -27,12 +27,12 @@ comments: true
定義に従うと、`preorder``inorder` はいずれも 3 つの部分に分けられます。
- 前順走査:`[ 根ノード | 左部分木 | 右部分木 ]` ,例えば上図の木は `[ 3 | 9 | 2 1 7 ]` に対応します。
- 中順走査:`[ 左部分木 | 根ノード 右部分木 ]` ,例えば上図の木は `[ 9 | 3 | 1 2 7 ]` に対応します。
- 中順走査:`[ 左部分木 | 根ノード | 右部分木 ]` ,例えば上図の木は `[ 9 | 3 | 1 2 7 ]` に対応します。
上図のデータを例にすると、下図の手順によって分割結果を得られます。
1. 前順走査の先頭要素 3 が根ノードの値です。
2. 根ノード 3 の `inorder` におけるインデックスを探すと、そのインデックスを用いて `inorder``[ 9 | 3 1 2 7 ]` に分割できます。
2. 根ノード 3 の `inorder` におけるインデックスを探すと、そのインデックスを用いて `inorder``[ 9 | 3 | 1 2 7 ]` に分割できます。
3. `inorder` の分割結果から、左部分木と右部分木のノード数はそれぞれ 1 と 3 であることがわかり、したがって `preorder``[ 3 | 9 | 2 1 7 ]` に分割できます。
![前順走査と中順走査で部分木を分割する](build_binary_tree_problem.assets/build_tree_preorder_inorder_division.png){ class="animation-figure" }