1. 程式人生 > >二叉樹的前序遍歷、後序遍歷、中序遍歷規則(遞歸)

二叉樹的前序遍歷、後序遍歷、中序遍歷規則(遞歸)

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 }

二叉樹的前序遍歷、後序遍歷、中序遍歷規則(遞歸)