題目2 重建二叉樹

2021-06-10 01:14:17 字數 1252 閱讀 5042

題目:

題目描述:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並輸出它的後序遍歷序列。

輸入:輸入可能包含多個測試樣例,對於每個測試案例,

輸入的第一行為乙個整數n(1<=n<=1000):代表二叉樹的節點個數。

輸入的第二行包括n個整數(其中每個元素a的範圍為(1<=a<=1000)):代表二叉樹的前序遍歷序列。

輸入的第三行包括n個整數(其中每個元素a的範圍為(1<=a<=1000)):代表二叉樹的中序遍歷序列。

輸出:對應每個測試案例,輸出一行:

如果題目中所給的前序和中序遍歷序列能構成一棵二叉樹,則輸出n個整數,代表二叉樹的後序遍歷序列,每個元素後面都有空格。

如果題目中所給的前序和中序遍歷序列不能構成一棵二叉樹,則輸出」no」。

樣例輸入:

8
1 2 4 7 3 5 6 8
4 7 2 1 5 3 8 6
8
1 2 4 7 3 5 6 8
4 1 2 7 5 3 8 6
樣例輸出:

7 4 2 5 8 6 3 1
no

本題主要是在給出前序遍歷和中序遍歷的情況下構造出後序遍歷,如果不存在就輸出no!做這題目時,最主要的就是前序遍歷的第乙個元素一定是根結點!從而在中序遍歷中找到根元素,根元素左邊的在根結點的左子樹,根元素的右邊的位於根結點的右子樹,從面根據後序遍歷的定義,構造出後序遍歷,如果出現不符,則不能構造出,直接輸出 no!

以下是ac**:

#include #include #include #include #include #include #include #include #include using namespace std;

#define n 1010

int flag;//用於判斷是否存在

int pos(int p,int t,int n)

void build(int n,int s1,int s2,int s)

int main()

else

printf("no\n");

}return 0;

}

題目1385 重建二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並輸出它的後序遍歷序列。輸入 輸入可能包含多個測試樣例,對於每個測試案例,輸入的第一行為乙個整數n 1 n 1000 代表二叉樹的...

題目1385 重建二叉樹

資料結構題,必須知道中序才能確定樹,然後遞迴就行了。模擬過程如下 先序 1 2 4 7 3 5 6 8 中序 4 7 2 1 5 3 8 6先序為1,即根為1,到中序中找到1的位置,然後1左邊的為左子樹,右邊的為右子樹 分為2部分 先序 2 4 7 中序 7 2 4 先序 3 5 6 8 中序 5 ...

NYOJ 題目756 重建二叉樹

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 題目很簡單,給你一棵二叉樹的後序和中序序列,求出它的前序序列 so easy 輸入輸入有多組資料 少於100組 以檔案結尾結束。每組資料僅一行,包括兩個字串,中間用空格隔開,分別表示二叉樹的後序和中序序列 字串長度小於26,輸入...