time limit: 1000 ms memory limit: 65536 kibproblem description
給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。
input
輸入資料有多組,每組資料第一行輸入1個正整數n(1 <= n <= 50)為樹中結點總數,隨後2行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母(區分大小寫)的字串。
output
輸出乙個整數,即該二叉樹的高度。
sample input
9 abdfghiec
fdhgibeac
sample output
5(
#include
#include
#include
/* 此題為二叉樹部分遍歷基礎題,根據先序序列和中序序列來建立二叉樹,
前序遍歷序列的第乙個節點就是根節點,並在中序序列中找到此節點,那麼
中序序列的左邊所有節點便是根節點的左子樹部分,右邊為右子樹部分,因
此,可以用遞迴分而治之。*/
typedef
struct node
tree; //用typedef 為複雜的宣告定義簡單的別名,
//即把結構體的名字給起名為 tree。
tree *creat(char *pre,char *in,int len)
//這一步為在中序序列中查詢到當前根節點。
int lon=p-in; //這就可以求出左子樹節點的個數了;
root->lchild=creat(pre+1,in,lon);//這個為建立左子樹啊,遞迴,和引數裡的意思一樣。
root->rchild=creat(pre+1+lon,p+1,len-lon-1);//這一塊要充分理解,因為我們要的是建立右子樹的
//首位址,所以要計算好首位址所在的位置,以及剩餘
//的序列長度為右子樹部分。
return root;//日,提交了兩次都wa,原來忘了返回 。。。。。*****。
}int posttreedepth(tree *root )
else
return0;}
int main()
return
0;}
方法二:
#include
#include
#include
typedef
struct node
tree;
tree *creat(char a,char b,int len)
int l=p-b;
root->lchild=creat(a+1,b,l);
root->rchild=creat(a+1+l,p+1,len-l-1);
return root;
}int posttreedepth(tree *root )
else
return0;}
int main()
return
0;}
資料結構實驗之二叉樹四 (先序中序)還原二叉樹
time limit 1000ms memory limit 65536kb submit statistic problem description 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。input 輸入資料有多組,每組資料第一行輸入1個正整數n 1 n 50 為樹中...
資料結構實驗之二叉樹四 (先序中序)還原二叉樹
time limit 1000ms memory limit 65536kb submit statistic problem description 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。input 輸入資料有多組,每組資料第一行輸入1個正整數n 1 n 50 為樹中...
資料結構實驗之二叉樹四 (先序中序)還原二叉樹
time limit 1000ms memory limit 65536kb submit statistic problem description 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。input 輸入資料有多組,每組資料第一行輸入1個正整數n 1 n 50 為樹中...