今天做到阿里巴巴的一道筆試題,關於二叉樹的遍歷序列的,原題摘錄如下:
某二叉樹的先序遍歷是12453,中序遍歷是42513,那麼其後續遍歷是?
a 45231
b 42351
c 12345
d 54321
本題答案為a
本題考查的知識點是二叉樹前序、中序、後序遍歷的相互求法,即如果知道兩個的遍歷,如何求第三種遍歷。
首先,我們看看前序、中序、後序遍歷的特性:
前序遍歷(前序遍歷):
1.訪問根節點
2.前序遍歷左子樹
3.前序遍歷右子樹
中序遍歷:
1.中序遍歷左子樹
2.訪問根節點
3.中序遍歷右子樹
後序遍歷:
1.後序遍歷左子樹
2.後序遍歷右子樹
3.訪問根節點
以本題為例簡單說明:先序遍歷是 12453 依據先序遍歷的特性:先序是先訪問根節點 所以1是二叉樹的根節點,後序遍歷是先訪問左子樹和右子樹,後訪問 425**1**3,在1的左邊的是二叉樹的左子樹425,1右邊的3是二叉樹的右子樹,右子樹只有乙個節點,所以可以先構造出乙個二叉樹為
1 3(1的右子樹)
再看先序遍歷 12453和後序遍歷**425***1*3,2是左子樹的根節點,在後序遍歷中 2在4和5的中間 ,所以 4是2的左子樹,5是2的右子樹,構造出的二叉樹為:
1 21的左子樹) 3(1的右子樹)
4 (2的左子樹) 5(2的右子樹)
所以後序遍歷序列為 45231
本題答案為a
如果給出後序遍歷和中序遍歷來求前序遍歷的分析也是一樣。
二叉樹遍歷(前序,中序,後序
二叉樹的遍歷有三種方式,如下 1 前序遍歷 dlr 首先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。簡記根 左 右。2 中序遍歷 ldr 首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。簡記左 根 右。3 後序遍歷 lrd 首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點。簡記左 右 根。例1 如上圖...
二叉樹的前序中序和後序遍歷
根據某種策略,按照一定的次序訪問二叉樹中的每乙個結點,使每個結點被訪問一次且只被訪問一次。這個過程稱為二叉樹的遍歷。遍歷的結果是二叉樹結點的線性序列。非線性結構線性化。策略 左孩子結點一定要在右孩子結點之前訪問 若二叉樹為空,則返回 否則,所得到的線性序列分別稱為先序 根 序列。先序遍歷序列為 a ...
二叉樹的遍歷 前序 中序 後序
include includetypedef struct bintree treenode,b tree b tree root null 函式的宣告 b tree creat tree int n void print1 void preorder b tree pointer 前序遍歷 voi...