這篇着重講如何遍歷二叉樹,因為之前再次遇到二叉樹時,發現前序遍歷、中序遍歷 、后序遍歷,具體怎么找已經忘了。只剩下口訣:
前序遍歷:根結點 ---> 左子樹 ---> 右子樹
中序遍歷:左子樹---> 根結點 ---> 右子樹
后序遍歷:左子樹 ---> 右子樹 ---> 根結點
層次遍歷:僅僅需按層次遍歷就可以
時間久遠,其實口訣也沒記下(當時沒夠重視,外加使用少)。口訣記憶要點就是:
二叉樹的遍歷,是從左到右的,前、中、后這三個字代表着根結點的位置(其實也是最終根結點的位置)。
那么,再次看到前序遍歷,“前”就代表根結點在前,然后從左到右,就是:根結點——左子樹——右子樹
接下來,規則記住了,如何找呢?如下圖:
層次遍歷就不詳細講解了,從上往下就ok了,結果是:abcdefghi
前序遍歷思考方式:根——左——右。a,然后是左子樹b,但是b也有左子樹,此時把b再當成根,下一步應該是根b-左d-右e。到這,我們確定了a-b,由於d還有子樹,到達d時,我們要重新統計根d-左h-右i,由於 h、i沒有子樹,這一步我們的順序擴大到:a-b-d-h-i,d的子樹已遍歷,這時繼續走根b-左d-右e,所以順序后添加e,以此類推,補完整個結構,最后結果為:a-b-d-h-i-e-c-f-g。
中序遍歷思考方式:左——根——右。此時起點是最左邊的左子樹h,左h-根d-右i,這個時候,我繼續前序遍歷的思考方式,得出的結果卻是:h-d-b-a-i-e-f-c-g,而且中間邏輯有點詭異。這是為什么呢?急於獲得答案,我先根據正確結果得結出一個規律:從上往下找,可以用前序的那種思維模式,每一步都是新起點,從下往上,是把它們這一部分作為一個整體,需要走完,才能往上找,如:d、h、i看成一個d點,d內的順序(中序)是h-d-i,這時再把d當作左子樹,繼續遍歷。按照規律,h-d-i(d點的內部順序),d-b-e(b點的內部順序),最后找出的順序:h-d-i-b-e-a-f-c-g。
后序遍歷思考方式:左——右——根。結合中序得出的規律,把h-i-d看作d點的內部順序,最后查找結果為:h-i-d-e-b-f-g-c-a。
總規律:上到下,新起點。下到上,根為口。(這個口是接口,接口內的東西,自己有順序,整個接口再和外面排序)
好了,方法得出了,規律總結了。前序和中序、后序的思考方式為什么會不一樣呢?表面上自然是,一個從上而下,一個從下往上......
深層理論知識,還望大神們解答。
決定,以后要多記下自己的思維模式......應該是百利而有一害(費時間),不過,多年后回頭看,當年最多的應該就是時間了吧?