給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。
輸入格式:
輸入首先給出正整數n(≤50),為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母(區別大小寫)的字串。
輸出格式:
輸出為乙個整數,即該二叉樹的高度。
輸入樣例:
9輸出樣例:abdfghiec
fdhgibeac
我也是奇了怪了,一直段錯誤,我還沒發現問題,總覺得是cin和字元之間的問題,使用了getchar也不對,很納悶,我好像一直對getchar和cin等這些沒弄太清,看來有必要系統查詢學習一下了。覺得沒啥問題,試了試scanf,就過了,這就更讓我懷疑了。。。
求解二叉樹的高度,首先要根據前序和中序得到二叉樹,前序序列的第乙個就是根結點,再用同樣的方式遞迴構造左子樹和右子樹,注意遞迴時元素個數的改變和指標的改變,樹的題離不開遞迴可以說,畢竟它本身就是乙個遞迴的定義。求解樹的高度,也是遞迴,若為空,則為0,否則為左右子樹高度的最大值+1
下面的兩篇博文分別是通過前序和中序得到二叉樹和通過中序和後序得到二叉樹以及構造完成之後的例子
天梯賽&&hbu訓練營——玩轉二叉樹 (25分)
天梯賽&&hbu訓練營——樹的遍歷 (25分)
#include
#include
using
namespace std;
typedef
struct nodenode,
*tree;
tree create
(int n,
char
*pre,
char
*mid)
tree-
>left =
create
(i,pre+
1,mid)
; tree-
>right =
create
(n-i-
1,pre+i+
1,mid+i+1)
;return tree;
}int
getheight
(tree tree)
intmain()
getchar()
;for
(int i=
0;i) tree tree =
create
(n,pre,mid)
;int h =
getheight
(tree)
; cout << h;
return0;
}
還原二叉樹(25 分)
給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入首先給出正整數n 50 為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區別大小寫 的字串。輸出為乙個整數,即該二叉樹的高度。9 abdfghiec fdhgibeac5 輸入 前序遍歷,中...
還原二叉樹(25 分)
給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入首先給出正整數n 50 為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區別大小寫 的字串。輸出為乙個整數,即該二叉樹的高度。9 abdfghiec fdhgibeac5 include i...
還原二叉樹 25 分
給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入首先給出正整數n 50 為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區別大小寫 的字串。輸出為乙個整數,即該二叉樹的高度。9abdfghiec fdhgibeac include inc...