資料結構 樹的遍歷相關筆試題

2021-07-30 15:16:10 字數 1254 閱讀 7298

一顆二叉樹的先序遍歷:abdecfg;中序遍歷:dbeafcg;後序遍歷:debfgca。

對於二叉樹的遍歷在之前的部落格中有介紹:

根據先序遍歷可知根節點為a;

根據中序遍歷可知dbe為a的左子樹,fcg為a的右子樹;

遞迴實現,把dbe當作一顆新樹,把fcg當作一顆新樹;

在遞迴的過程當中輸出後序。

#include 

#include

using

namespace

std;

/* * t1儲存先序遍歷輸入進去的陣列,t2儲存中序遍歷輸入進去的陣列。

*/char t1[100],t2[100];

/* *a代表先序遍歷陣列中的下標;

*b代表中序遍歷陣列中的下標;

*n代表傳進來陣列中的個數。

*/void work(int a,int b,int n)

else

if(n < 1)

return;

int i = 0;

for(i=0;t1[a] != t2[b+i];i++);

work(a+1,b,i);

work(a+i+1,b+i+1,n-i-1);

printf("%c ",t1[a]);

}int main()

根據後序遍歷可知根節點為a;

根據中序遍歷可知dbe為a的左子樹,fcg為a的右子樹;

遞迴實現,把dbe當作一顆新樹,把fcg當作一顆新樹;

在遞迴的過程當中輸出前序。

#include 

using

namespace

std;

/* *t1儲存後序遍歷輸入的陣列,t2儲存中序遍歷輸入的陣列。

*/char t1[100],t2[100];

/* * a代表後序遍歷陣列中的下標

* b代表中序遍歷陣列中的下標

* c代表傳參時陣列中有效的資料個數

*/void work(int a,int b,int n)

else

if(n < 1)

return;

int i = 0;

for(i=0; t1[a] != t2[b+i]; i++);

cout

<1-i,b,i);

work(a-1,b+i+1,n-i-1);

}int main()

資料結構筆試題

一 如何判斷乙個單鏈表是有環的?注意不能用標誌位,最多只能用兩個額外指標 struct node bool check const node head return false 無環 true 有環 一種o n 的辦法就是 搞兩個指標,乙個每次遞增一步,乙個每次遞增兩步,如果有環的話兩者必然重合,反...

資料結構筆試題目

1 c 編成求二叉樹的深度 int bintreedepth link head 2 排序二叉樹插入乙個節點或雙向鍊錶的實現 排序二叉樹 左小於根,根小於右。左右又分別是排序二叉樹。前序遍歷 根左右 中序遍歷 左根右 後序遍歷 左右根 排序二叉樹插入乙個結點 大於左,往右找,小於右往左找,遞迴實現。...

筆試題之資料結構

時間複雜度 整個演算法的執行時間與基本操作重複執行的次數成正比。參考kmp演算法,該演算法的時間複雜度為q n 通常,模式串的長度n比主串的長度m要小的多 穩定排序 排序前後,數值的相對前後位置不變的為穩定排序,否則為不穩定排序。1 簡單排序,時間複雜度o n的平方 不穩定 2 快速排序,時間複雜度...