也是認識的一個小哥們最近面試題中給出的一個二叉樹前中後序的題。面試
記得當初本身已經很明白這個前中後序的過程,而後今天卻算了好了很久經過查詢相關知識,只能對着結果本身一遍一遍的算,不停的寫那個結果最後仍是搞明白了,此次要把過程 給記錄下來。算法
二叉樹的前序(1-2-3-4-5-6-7-8-9),中序(2-3-1-6-7-8-5-9-4)而後求後序?spa
再講題前,我先給出這些概念的詳細講解,用圖來分析:blog
圖是我本身花的,也是照着《算法導論》第12章,二叉搜索樹 -286頁花的,如下的前中後序講解都是說的這個圖。二叉樹
前序的過程是:根節點->左子樹->右子樹;其實這個你們一看都知道,何須我說呢。確實如此,我看書也能看明白,不是就根左右嘛,若是我再細一點我想你們會更容易理解。這就是我要寫的必要。這種遍歷,第一個是根節點,什麼是根節點就是否是葉子節點,也就是左右都有或左有或右有。而後遍歷第一個根節點就是 6 咱們按照最上面的根節點遍歷前序,這是理解的要點。那麼往下走,5也是根節點好了5下面的2 和 5是葉子了,那麼就要按照先左後的方式走了。那麼如今已經走了到 6 5 2 5,先左後右,先上後下。而後看右邊。7 好這個是根根節點,往下 8 不是根也就是直接讀取了。那麼最後是什麼? 6 5 2 5 7 8 ,前序說完了,不知道你是否明白了呢?搜索
中序的過程是:左子樹->根節點->右子樹;那麼這點就要不一樣於前序了,這個規則是要按照左開始的,必定要強調左 。往左找,往下找,找到第一個。而後咱們找到了 2,ok,2是葉子節點因此沒了,網上找 而後是 5 ,咱們這裏要注意了,在遍歷的過程當中咱們都是按照一個單元一個單元的去完成的,這個單元是我給起的名字的。什麼是一個單元,就是一套左根右。因此到了這裏,你走到 2 往上是根 5 ,還須要把 右邊的 5 完成後,才能接着往上在找。因此左半邊的結果就是 2 5 5 6 。找完左邊,找右邊。7 是根那麼就接着往下找,一個就是一個 右葉子 8 ,ok,那麼左葉子沒有了,而中序的第二位是根,那麼就有了 7 在 8 前面。好啦,最後的中序結果就是 2 5 5 6 7 8 。準備好了後序了嗎?我想你已經很明白了。遍歷
後序的過程是:左子樹->右子樹->根節點;也就是把最上面的根節點放到最後就對了,這個跟中序很像。咱們仍是找左,依舊是 2 ,而後呢考慮到順序,單元的第二位就是 右邊葉子節點的 5 了,因此是 2 5(葉子的) 5 (根) ,完成一個單元,往上走到6,一看是根那,咱們順序應該是左右根,因此不是它。找右邊,7 是根,接着往下找,找到 8 ,ok由於沒有了左葉子,第二位是右葉子那麼就是 8 了,往上是 7 再到最後的 6 。The result is 2 5 5 8 7 6。im
ok,已經敘述完畢,不知道是否說的明白。歡迎你們一塊兒討論,交流。那麼剛開始的題呢?我想你們能夠算出來了。查詢