原文:https://blog.csdn.net/yanerhao/article/details/45175943
面試題目或多或少會出現這樣的選擇題或者簡答題:
首先我們得知道概念:
前序遍歷:先訪問當前節點,再訪問當前節點的左子樹,最后訪問當前節點的右子樹。對於二叉樹,深度遍歷與此同。規律:根在前;子樹在根后且左子樹比右子樹靠前,且第一個就是根節點;
中序遍歷:先訪問當前節點的左子樹,然后訪問當前節點,最后是當前節點的右子樹,二叉樹,中序遍歷會得到數據升序效果。規律:根在中;左子樹在跟左邊,右子樹在根右邊,左邊部分是根結點的左子樹的中序遍歷序列,右邊部分是根結點的右子樹的中序遍歷序列 ;
后序遍歷:先訪問當前節點的左子樹,然后是當前節點的又子樹,最后是當前節點。規律:根在后;子樹在根前且左子樹比右子樹靠前,且最后一個節點是根節點。
一、前序+中序
1. 根據前序序列的第一個元素建立根結點;
2. 在中序序列中找到該元素,確定根結點的左右子樹的中序序列;
3. 在前序序列中確定左右子樹的前序序列;
4. 由左子樹的前序序列和中序序列建立左子樹;
5. 由右子樹的前序序列和中序序列建立右子樹。
如:已知一棵二叉樹的先序遍歷序列和中序遍歷序列分別是abdgcefh、dgbaechf,求二叉樹及后序遍歷序列。
先序:abdgcefh--->a bdg cefh
中序:dgbaechf---->dgb a echf
得出結論:a是樹根,a有左子樹和右子樹,左子樹有bdg結點,右子樹有cefh結點。
先序:bdg--->b dg
中序:dgb --->dg b
得出結論:b是左子樹的根結點,b無右子樹,有左子樹。
先序:dg---->d g
中序:dg----->dg
得出結論:d是b左子樹的根節點,d無左子樹,g是d的右子樹
然后對於a 的右子樹類似可以推出
最后還原: a
b c
d e f
g h
后序遍歷:gdbehfca
二、后序+中序:
已知一棵二叉樹的后序序列和中序序列,構造該二叉樹的過程如下:
1. 根據后序序列的最后一個元素建立根結點;
2. 在中序序列中找到該元素,確定根結點的左右子樹的中序序列;
3. 在后序序列中確定左右子樹的后序序列;
4. 由左子樹的后序序列和中序序列建立左子樹;
5. 由右子樹的后序序列和中序序列建立右子樹
如還是上面題目:如:已知一棵二叉樹的后序遍歷序列和中序遍歷序列分別是gdbehfca、dgbaechf,求二叉樹
后序:gdbehfca---->gdb ehfc a
中序:dgbaechf----->dgb a echf
得出結論:a是樹根,a有左子樹和右子樹,左子樹有bdg結點,右子樹有cefh結點。
后序:gdb---->gd b
中序:dgb----->dg b
得出結論:b是a左子樹的根節點,無右子樹,有左子樹dg。
后序:gd---->g d
中序:dg----->d g
得出結論:d是b的左子樹根節點,g是d的右子樹。
然后對於a 的右子樹類似可以推出。然后還原。
三、前序+后序
前序和后序在本質上都是將父節點與子結點進行分離,但並沒有指明左子樹和右子樹的能力,因此得到這兩個序列只能明確父子關系,而不能確定一個二叉樹。 故此法無。不能唯一確定一個二叉樹。
---------------------
原文:https://blog.csdn.net/yanerhao/article/details/45175943