也是認識的乙個小哥們最近面試題中給出的乙個二叉樹前中後序的題。
記得當初自己已經很明白這個前中後序的過程,然後今天卻算了好了好久通過查詢相關知識,只能對著結果自己一遍一遍的算,不停的寫那個結果最後還是搞明白了,這次要把過程 給記錄下來。
二叉樹的前序(1-2-3-4-5-6-7-8-9),中序(2-3-1-6-7-8-5-9-4)然後求後序?
再講題前,我先給出這些概念的詳細講解,用圖來分析:
圖是我自己花的,也是照著《演算法導論》第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。
二叉樹的前中後序遍歷
秋招記錄 對一棵二叉樹進行遍歷,我們可以採取3種順序進行遍歷,分別是前序遍歷 中序遍歷和後序遍歷。這三種方式是以訪問父節點的順序來進行命名的。假設父節點是n,左節點是l,右節點是r,那麼對應的訪問遍歷順序如下 前序遍歷 中左右 n l r 中序遍歷 左中右 l n r 後序遍歷 左右中 l r n ...
二叉樹的前 中 後序遍歷
import lombok.data import lombok.noargsconstructor data noargsconstructor class treenode 前序遍歷 根 左 右 public void preorder 遞迴向右子樹前序遍歷if this right null ...
二叉樹的前 中 後序遍歷
前序 根左右 中序 左根右 後序 左右根 前序遍歷 124563 中序遍歷 546213 後序遍歷 564231 package datastructure public class binarytreedemo class binarytree public binarytree hero roo...