資料結構實驗之二叉樹四 (先序中序)還原二叉樹

2021-08-25 14:18:39 字數 1574 閱讀 4342

time limit: 1000 ms memory limit: 65536 kib

problem 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 為樹中...