面試題目或多或少會出現這樣的選擇題或者簡答題:
首先我們得知道概念:
前序走訪:先訪問當前節點,再訪問當前節點的左子樹,最後訪問當前節點的右子樹。對於二叉樹,深度遍曆與此同。規律:根在前;子樹在根後且左子樹比右子樹靠前,且第一個就是根節點;
中序遍曆:先訪問當前節點的左子樹,然後訪問當前節點,最後是當前節點的右子樹,二叉樹,中序遍曆會得到資料升序效果。規律:根在中;左子樹在跟左邊,右子樹在根右邊,左邊部分是根結點的左子樹的中序遍曆序列,右邊部分是根結點的右子樹的中序遍曆序列 ;
後序遍曆:先訪問當前節點的左子樹,然後是當前節點的又子樹,最後是當前節點。規律:根在後;子樹在根前且左子樹比右子樹靠前,且最後一個節點是根節點。
一、前序+中序
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 的右子樹類似可以推出。然後還原。
三、前序+後序
前序和後序在本質上都是將父節點與子結點進行分離,但並沒有指明左子樹和右子樹的能力,因此得到這兩個序列只能明確父子關係,而不能確定一個二叉樹。 故此法無。不能唯一確定一個二叉樹。