通過先序和中序陣列生成後序陣列

2021-10-24 01:29:57 字數 1090 閱讀 8169

通過先序和中序陣列生成後序陣列

給出一棵二叉樹的先序和中序陣列,通過這兩個陣列直接生成正確的後序陣列。

輸入描述:

第一行乙個整數 n,表示二叉樹的大小。

第二行 n 個整數 a_i,表示二叉樹的先序遍歷陣列。

第三行 n 個整數 b_i,表示二叉樹的中序遍歷陣列。

輸出描述:

輸出一行 n 個整數表示二叉樹的後序遍歷陣列。

示例1輸入

3

1 2 3

2 1 3

輸出
2 3 1
備註:

1 ≤n

≤104

1 \leq n \leq 10^4

1≤n≤1041≤

ai,b

i≤

n1 \leq a_i,b_i \leq n

1≤ai​,

bi​≤

n 題解:先序遍歷:根 左 右

中序遍歷:左 根 右

先序遍歷的第乙個節點一定是整棵樹的根節點,於是我們可以在中序遍歷中查詢該節點位置,假設為 p ,則在中序遍歷序列中:p左邊的序列就是根節點左子樹中序遍歷序列,p右邊的序列就是根節點右子樹中序遍歷序列,遞迴進行處理左右子樹即可。(注意:提前儲存先序序列中的每個元素在中序序列中的位置,可優化速度)

**:

#include

#include

using

namespace std;

const

int n =

10010

;int n;

int pre[n]

;int in[n]

;unordered_map<

int,

int> hash;

void

dfs(

int p_l,

int p_r,

int i_l,

int i_r)

intmain

(void

)dfs(0

, n -1,

0, n -1)

;return0;

}

通過先序和中序陣列生成後序陣列

題目 已知一棵二叉樹所有的節點值都不同,給定這棵樹正確的先序和中序陣列,不要重建整棵樹,而是通過這兩個陣列直接生成正確的後序陣列。基本思路 根據當前的先序和中序陣列,設定後序陣列最右邊的值,然後劃分出左子樹的先序 中序陣列,以及右子樹的先序 中序陣列,先根據右子樹的劃分設定好後序陣列,再根據左子樹的...

先序 中序和後序陣列兩兩結合重構二叉樹

題目 已知一棵二叉樹的所有節點值都不同,給定這棵二叉樹正確的先序 中序和後序陣列。請分別用三個函式實現任意兩種陣列結合重構原來的二叉樹,並返回重構二叉樹的頭結點。public class preinposttobst public static node preintotree int pre,in...

已知先序和中序求後序或中序和後序求先序

首先介紹樹的三種遍歷方式的遍歷順序 先序遍歷 根 左子樹 右子樹 特點 第乙個元素為根 中序遍歷 左子樹 根 右子樹 特點 根的兩邊分別為左子樹和右子樹 後序遍歷 左子樹 右子樹 根 特點 最後乙個元素為根 有如下圖的二叉樹 其先序 中序 後序遍歷分別為 dbacegf abcdefg acbfge...