(二叉樹提高題)還原二叉樹

2021-10-11 03:11:36 字數 1253 閱讀 2871

給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。

輸入格式:

輸入首先給出正整數n(≤50),為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母(區別大小寫)的字串。

輸出格式:

輸出為乙個整數,即該二叉樹的高度。

輸入樣例:

9

abdfghiec

fdhgibeac

輸出樣例:

5
**如下:

#include

using

namespace std;

#define maxsize 110

//a是先序遍歷序列,b是中序遍歷序列

//n是子樹的總結點數

intgetdeep

(char a,

char b,

int n)

}//此時idx指向的b中的結點就是樹的根節點,接下來需要遞迴判斷左右子樹哪個高,返回高的那個值

int left =

getdeep

(a +

1, b, idx)+1

;//這裡比較難理解,實際上在中序遍歷的時候左子樹有多少個結點,那麼先序遍歷後序的多少個結點也是左子樹

int right =

getdeep

(a + idx +

1, b + idx +

1, n - idx -1)

+1;int max = left;

if(right > left)

return max;

}int

main()

某位大佬的圖就把過程畫的非常清楚(我是菜雞無疑了。。。)

![在這裡插入描述]

執行結果:

二叉樹 還原二叉樹 二叉搜尋樹

先序遍歷的特點 先遍歷根結點,再遍歷左子樹,最後再遍歷右子樹 中序遍歷的特點 先遍歷左子樹,再遍歷根結點,最後再遍歷右子樹 後序遍歷的特點 先遍歷左子樹,再遍歷右子樹,最後再遍歷根結點 舉例 先序遍歷 a b d f g h i e c 中序遍歷 f d h g i b e a c 如上,根據先序遍...

還原二叉樹

給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入資料有多組,每組資料第一行輸入 1個正整數 n 1 n 50 為樹中結點總數,隨後 2行先後給出先序和中序遍歷序列,均是長度為 n的不包含重複英文本母 區分大小寫 的字串。輸出乙個整數,即該二叉樹的高度。9 abdfghiec ...

還原二叉樹

資料結構實驗之二叉樹四 還原二叉樹 time limit 1000ms memory limit 65536k 有疑問?點這裡 題目描述 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入輸入資料有多組,每組資料第一行輸入1個正整數n 1 n 50 為樹中結點總數,隨後2行先後...