一顆二叉樹的先序遍歷: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 快速排序,時間複雜度...