- 二叉樹的遍歷(traversing binary tree)是指從根結點出發,按照某種次序依次訪問二叉樹中所有的結點,使得每個結點被訪問依次且僅被訪問一次。
四種遍歷方式分別為:先序遍歷、中序遍歷、后序遍歷、層序遍歷。
PS:由於在二叉樹這一個分類中都能找到對應的代碼,所以詳細代碼就不在這里貼了
一、先序遍歷
- 訪問根節點
- 用先序遍歷的方式訪問左子樹
- 用先序遍歷的方式訪問右子樹
圖的思維過程
- 訪問根節點A
- A分為左右兩個子樹,遞歸調用,所以遵循“根節點-左-右”,所以訪問B節點
- 同2步驟,訪問D節點
- 此時D沒有分支,回溯到B訪問F節點
- 同2步驟,訪問E節點,同4步驟,回溯F,F右兒子為空,回溯B,B左右兒子遍歷完畢,回溯A,此時A的左子樹已經遍歷完成,開始遍歷右子樹
- 同樣訪問節點C
- 同步驟2訪問節點G
- G左子樹為空,訪問右兒子H
- H沒有分支,回溯G,G遍歷完成,回溯C,遍歷I節點,這樣整棵樹就已經遍歷完成。
遍歷結果:A BDFE CGHI
二、中序遍歷
- 用中序遍歷訪問左子樹
- 訪問根節點
- 用中序遍歷訪問右子樹
過程跟先序遍歷差不多,這里不多敘述。
遍歷結果:BDEF A GHCI
三、后序遍歷
- 用后序遍歷訪問左子樹
- 用后序遍歷訪問右子樹
- 訪問根節點
過程跟先序遍歷差不多,這里不多敘述。
遍歷結果 DEFB HGIC A
小結
三種遍歷方法基本路線是一樣的,只是訪問每個節點的時機不同形成了不同的輸出。
四、層序遍歷
層序遍歷所要解決的問題很好理解,就是按二叉樹從上到下,從左到右依次打印每個節點中存儲的數據。
層序遍歷跟上面三種遍歷有些不一樣,層序遍歷采用的是數據結構中的隊列。
- 根節點入隊
- 訪問隊首元素,左兒子若不為空則左子葉入隊,右兒子若不為空則入隊
- 隊首元素出隊
- 重復3 、4步驟,直到隊列為空為止
圖的思維過程
- A入隊
- 訪問隊首A,左兒子不為空,B入隊,右兒子不為空,C入隊,A出隊
- 訪問隊首B,左右兒子為空,不用操作,B出隊
- 訪問隊首C,同步驟2
- 訪問隊首D,同步驟3
- 訪問隊首E,同步驟2
- 訪問隊首F,同步驟3
- 訪問隊首G,同步驟3
遍歷結果 ABCDEFG