二叉樹的前序遍歷、後序遍歷、中序遍歷規則(遞歸)
阿新 • • 發佈:2019-01-25
ref style deb strchr pri efi href oid 二叉
1.前序遍歷的規則:(根左右)
(1)訪問根節點
(2)前序遍歷左子樹
(3)前序遍歷右子樹
對於圖中二叉樹,前序遍歷結果:ABDECF
2.中序遍歷的規則:(左根右)
(1)中序遍歷左子樹
(2)訪問根節點
(3)中序遍歷右子樹
對於圖中二叉樹,中序遍歷結果:DBEAFC
3.後序遍歷二叉樹的規則:(左右根)
(1)後序遍歷左子樹
(2)後序遍歷右子樹
(3)訪問根節點
對於圖中二叉樹,後序遍歷結果:DEBFCA
例題:POJ2255 給了前、中序遍歷,求後序遍歷。參考:https://blog.csdn.net/luckcircle/article/details/53327900
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #define MAX 50 5 using namespace std; 6 7 char a[MAX],b[MAX]; 8 void build(int n,char *a,char *b){ 9 if(n<=0)return; 10 else{ //先序根左右 中序左根右 後序左右根 11 int p=strchr(b,a[0])-b;//先序的第一個節點是根 在中序中找到根 12 build(p,a+1,b); //並以此分成左右子串 遞歸求解 13 build(n-p-1,a+p+1,b+p+1); 14 printf("%c",a[0]); 15 } 16 } 17 int main(){ 18 while(scanf("%s %s",a,b)!=EOF){ 19 int n=strlen(a); 20 build(n,a,b); 21 printf("\n"); 22 memset(a,0,sizeof(a)); 23 memset(b,0,sizeof(b)); 24 } 25 }
二叉樹的前序遍歷、後序遍歷、中序遍歷規則(遞歸)