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