二叉樹的還原

2021-08-11 18:00:25 字數 1111 閱讀 4635

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

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

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

9

abdfghiec

fdhgibeac

5

先序遍歷的順序為:根->左子樹->右子樹

中序遍歷的順序為:左子樹->根->右子樹

後序遍歷的順序為:左子樹->右子樹->根

這裡用到了全域性變數定義陣列,從而在遞迴時只需要傳遞下標值而無需傳遞陣列。

因為本題就是求高度,不涉及節點的資料,所以沒有必要在結構體中定義data,需要建立樹的結構即可。

先序第乙個資料必是樹根,通過檢索其在中序陣列中的位置,將中序陣列劃分為左子樹和右子樹,同時根據左右字數節點的個數,將先序序列劃分為左右子樹。這樣進行完一次的劃分後,就確定了左右子樹的先序和中序順序,利用遞迴將其劃分下去。同時需要考慮何時不會有左右子樹,答案顯而易見,就是利用根把中序陣列劃分後無剩餘元素。

#include#includetypedef struct node* ptr;

struct node;

char pre[50],in[50];

int num;

//四個引數分別為先序、中序陣列下標的最小、最大值

ptr restore( int premin, int premax, int inmin, int inmax);

int getheight( ptr head);

int main(void)

ptr restore( int premin, int premax, int inmin, int inmax)

} return root;

}int getheight( ptr head)

return max + 1;

}

還原二叉樹

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

還原二叉樹

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

還原二叉樹

5 9 還原二叉樹 25分 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入首先給出正整數n le 50 為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區別大小寫 的字串。輸出為乙個整數,即該二叉樹的高度。9 abdfghiec fdh...