二叉樹的遍歷是指從根結點出發,按照某種次序依次訪問二叉樹中全部結點,使得每一個結點被訪問一次且僅被訪問一次。動畫
在二叉樹的遍歷中存在三種較爲經常使用的遍歷方式:前序遍歷、中序遍歷、後序遍歷。接下來我將嘗試着用三組動畫向讀者詳細的介紹這三種遍歷方式的邏輯思路,但願讓讀者看到任何的二叉樹都能在腦海中快速的勾勒出動畫。3d
在介紹這三組動畫前,咱們先用圖來介紹一下二叉樹的建立以及動畫中的一些約定說明。code
如圖所示是二叉樹中的一個節點,這個節點有左子樹與右子樹,經過兩根綠色的鏈接線,將此節點劃分紅了三個區域,咱們分別用前、中、後這三個輔助點來表示。cdn
這三個點代表在二叉樹的遍歷中何時要取出此節點的值。blog
任何一個節點去遍歷都是 前-左綠線-中-右綠線-後 這樣的順序遍歷的。遞歸
使用遞歸方式實現前序遍歷的具體過程爲:it
咱們來對上面的動畫進行一個充分的說明來理解前序遍歷的遞歸實現方式。io
28
這個節點,咱們看前輔助點
,因爲是前序遍歷,那麼此刻咱們取出該節點的值28
28
的左子樹16
這個節點中,咱們看前輔助點
,因爲是前序遍歷,取出該節點的值16
16
的左子樹13
這個節點中,咱們看前輔助點
,因爲是前序遍歷,取出該節點的值13
13
這個節點左子樹爲空,那麼咱們左綠線就沒有,而後看中輔助點
,因爲是前序遍歷,所以不作處理13
這個節點右子樹爲空,那麼咱們右綠線就沒有,而後看後輔助點
,因爲是前序遍歷,所以不作處理16
這個節點中,看中輔助點
,因爲是前序遍歷,所以不作處理16
這個節點的右子樹22
這個節點,看前輔助點
,因爲是前序遍歷,取出該節點的值22
使用遞歸方式實現中序遍歷的具體過程爲:class
咱們來對上面的動畫進行一個充分的說明來理解中序遍歷的遞歸實現方式。二叉樹
28
這個節點,咱們看前輔助點
,因爲是中序遍歷,所以不作處理28
的左子樹16
這個節點中,咱們看前輔助點
,因爲是中序遍歷,所以不作處理16
的左子樹13
這個節點中,咱們看前輔助點
,因爲是中序遍歷,所以不作處理13
這個節點左子樹爲空,那麼咱們左綠線就沒有,而後看中輔助點
,因爲是中序遍歷,取出該節點的值13
13
這個節點右子樹爲空,那麼咱們右綠線就沒有,而後看後輔助點
,因爲是中序遍歷,所以不作處理16
這個節點中,看中輔助點
,因爲是中序遍歷,取出該節點的值16
16
這個節點的右子樹22
這個節點,看前輔助點
,因爲是中序遍歷,所以不作處理中輔助點
,因爲是中序遍歷,取出該節點的值22
使用遞歸方式實現後序遍歷的具體過程爲:
咱們來對上面的動畫進行一個充分的說明來理解後序遍歷的遞歸實現方式。
28
這個節點,咱們看前輔助點
,因爲是後序遍歷,所以不作處理28
的左子樹16
這個節點中,咱們看前輔助點
,因爲是後序遍歷,所以不作處理16
的左子樹13
這個節點中,咱們看前輔助點
,因爲是後序遍歷,所以不作處理13
這個節點左子樹爲空,那麼咱們左綠線就沒有,而後看中輔助點
,因爲是後序遍歷,所以不作處理13
這個節點右子樹爲空,那麼咱們右綠線就沒有,而後看後輔助點
,因爲是後序遍歷,取出該節點的值13
16
這個節點中,看中輔助點
,因爲是後序遍歷,所以不作處理16
這個節點的右子樹22
這個節點,看前輔助點
,因爲是中序遍歷,所以不作處理中輔助點
,因爲是後序遍歷,所以不作處理後輔助點
,因爲是後序遍歷,取出該節點的值16