給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。
輸入首先給出正整數n(
≤50),為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母(區別大小寫)的字串。
輸出為乙個整數,即該二叉樹的高度。
9
abdfghiec
fdhgibeac
5
輸入:前序遍歷,中序遍歷
1、尋找樹的root,前序遍歷的第一節點g就是root。
2、觀察前序遍歷gdafemhz,知道了g是root,剩下的節點必然在root的左或右子樹中的節點。
3、觀察中序遍歷adefghmz。其中root節點g左側的adef必然是root的左子樹中的節點,g右側的hmz必然是root的右子樹中的節點,root不在中序遍歷的末尾或開始就說明根節點的兩顆子樹都不為空。
4、觀察左子樹adef,按照前序遍歷的順序來排序為dafe,因此左子樹的根節點為d,並且a是左子樹的左子樹中的節點,ef是左子樹的右子樹中的節點。
5、同樣的道理,觀察右子樹節點hmz,前序為mhz,因此右子樹的根節點為m,左子節點h,右子節點z。
觀察發現,上面的過程是遞迴的。先找到當前樹的根節點,然後劃分為左子樹,右子樹,然後進入左子樹重複上面的過程,然後進入右子樹重複上面的過程。最後就可以還原一棵樹了:
#include#include#includestruct node;
typedef struct node * tree;
char in[55],pre[55];
tree findtree(char in,char pre,int length)
int length(tree head)
int main()
還原二叉樹(25 分)
給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入首先給出正整數n 50 為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區別大小寫 的字串。輸出為乙個整數,即該二叉樹的高度。9 abdfghiec fdhgibeac5 include i...
還原二叉樹 25 分
給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入首先給出正整數n 50 為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區別大小寫 的字串。輸出為乙個整數,即該二叉樹的高度。9abdfghiec fdhgibeac include inc...
7 2 還原二叉樹(25 分)
題目鏈結 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入首先給出正整數n 50 為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區別大小寫 的字串。輸出為乙個整數,即該二叉樹的高度。9 abdfghiec fdhgibeac5 incl...