給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。
輸入格式:
輸入首先給出正整數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行先後...