還原二叉樹(25 分)

2021-08-10 15:26:58 字數 927 閱讀 3253

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

輸入首先給出正整數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...