計算機技術——已知二叉樹的前序遍歷和中序遍歷,如何得到它的後序遍歷?
阿新 • • 發佈:2019-01-07
對一棵二叉樹進行遍歷,我們可以採取3中順序進行遍歷,分別是前序遍歷、中序遍歷和後序遍歷。這三種方式是以訪問父節點的順序來進行命名的。假設父節點是N,左節點是L,右節點是R,那麼對應的訪問遍歷順序如下:
- 前序遍歷 N->L->R
- 中序遍歷 L->N->R
- 後序遍歷 L->R->N
/*****************************************************************************************************/
宣告:本博內容均由http://blog.csdn.net/droidphone
/*****************************************************************************************************/
所以,對於以下這棵樹,三種遍歷方式的結果是:
- 前序遍歷 ABCDEF
- 中序遍歷 CBDAEF
- 後序遍歷 CDBFEA
已知二叉樹的前序遍歷和中序遍歷,如何得到它的後序遍歷
其實,只要知道其中任意兩種遍歷的順序,我們就可以推斷出剩下的一種遍歷方式的順序,這裡我們只是以:知道前序遍歷和中序遍歷,推斷後序遍歷作為例子,其他組合方式原理是一樣的。要完成這個任務,我們首先要利用以下幾個特性:- 特性A,對於前序遍歷,第一個肯定是根節點;
- 特性B,對於後序遍歷,最後一個肯定是根節點;
- 特性C,利用前序或後序遍歷,確定根節點,在中序遍歷中,根節點的兩邊就可以分出左子樹和右子樹;
- 特性D,對左子樹和右子樹分別做前面3點的分析和拆分,相當於做遞迴,我們就可以重建出完整的二叉樹;
- 前序遍歷的順序是: CABGHEDF
- 中序遍歷的順序是: GHBACDEF
/ \
GHBA DEF
第二步,取出左子樹,左子樹的前序遍歷是:ABGH,中序遍歷是:GHBA,根據特性A和C,得出左子樹的父節點是A,並且A沒有右子樹。 C
/ \
A DEF
/ GHB第三步,使用同樣的方法,前序是BGH,中序是GBH,得出父節點是B,G和H分別是左右節點。 C
/ \
A DEF
/ B / \ G H第四步,回到右子樹,它的前序是EDF,中序是DEF,依然根據特性A和C,得出父節點是E,左右節點是D和F。 C
/ \
A E
/ / \ B D F / \ G H到此,我們得到了這棵完整的二叉樹,因此,它的後序遍歷就是:GHBADFEC。