給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。
輸入首先給出正整數n(<=50),為樹中結點總數。下面2行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母(區別大小寫)的字串。
輸出為乙個整數,即該二叉樹的高度。
此題為利用先序和中序來構造整顆二叉樹,關鍵在於利用先序序列(「根左右」)第乙個元素是樹的根節點這一特性,再從中序序列(「左根右」)中找到對應的元素,從而分出左子樹和右子樹。構造樹的過程和 二叉樹的遍歷(洛谷p1030 求先序排列) 差不多(鏈結中是已知後序和中序,此題是已知前序和中序),具體細節解釋參考鏈結。本題**解釋著重在於求樹的高度。
#include #include typedef struct treelinklist;
linklist *head, *end, *node;
char str1[50], str2[50];
int maketree(int s1,int e1,int s2,int e2,int temp)
end = node;
for (int i = s2; i <= e2; i++)
}end = end_before;
return 0;
}int getheight(linklist *node)
int main()
鍊錶結構體宣告:
typedef struct treelinklist;
構造二叉樹:
int maketree(int s1,int e1,int s2,int e2,int temp)
end = node;
for (int i = s2; i <= e2; i++)
}end = end_before;
return 0;
}
求樹的高度:
int getheight(linklist *node)
為了求得二叉樹的高度,只需要每次從兩個子樹中選擇高度較大的那一顆即可,由於是從葉子到根,向上不斷累加高度,因此我們可以用遞迴的辦法。
用公式表達:height(t) = max(height(t.left), height(t.right)) + 1
根據二叉樹前序 中序遍歷還原二叉樹
在學習二叉樹遍歷的時候我們學習了三種遍歷方法 前序 中序 後序 同時我們知道給定前序和中序 中序和後序我們可以還原二叉樹,記得當時只是在紙上畫了一畫。現在把當時的想法完成。給定前序和中序生成二叉樹。include 在學習二叉樹遍歷的時候我們學習了三種遍歷方法 前序 中序 後序 同時我們知道給定前序和...
前序建立二叉樹 前序 中序 後序遍歷二叉樹
二叉樹的建立 如果要在記憶體中建立乙個如下左圖這樣的樹,wield 能讓每個結點確認是否有左右孩子,我們對它進行擴充套件,變成如下右圖的樣子,也就是將二叉樹中的每個結點的空指標引出乙個虛結點,其值為乙個特定值,比如 稱之為擴充套件二叉樹。擴充套件二叉樹就可以做到乙個遍歷序列確定一棵二叉樹了。如前序遍...
二叉樹的重構 前序 後序 中序還原二叉樹
只要知道前序 後序 中序就可以還原二叉樹。前序 中序 preorder gdafemhz inorder adefghmz 通過前序我們可以找到根節點為g,之後在中序中我們中序遍歷的特性找到g的左子樹adef和右子樹mhz。之後在通過前序找到左子樹的根節點d,那麼左子樹的左子樹為a,左子樹的右子樹為...