BST(二叉搜索樹) 已知前中後序遍歷結果,求二叉樹. 沒有找到解題思路,這裏整理一份,但願能幫到不清楚的道友node
BST(二叉搜索樹) 已知前中後序遍歷結果,求二叉樹算法
- 前序遍歷:4,3,1,2,8,7,16,10,9,14
- 中序遍歷:1,2,3,4,7,8,9,10,14,16
- 後序遍歷:2,1,3,7,9,14,10,16,8,4
思路:排序
- 經過前序遍歷算法和後序遍歷算法知道「中」是誰,
- 找到中序遍歷數據的「中」,分割成「左」「右」2部分
- 對「左」「右」單獨執行一、2步驟,知道不可分割。
求解:已知二叉樹
- 前序遍歷算法是「中左右」, 「中」在第一個
- 中序遍歷算法是「左中右」, 「中」在中間
- 後序遍歷算法是「左右中」, 「中」在最後一個
注:用符號括號表明一個樹(left,node,right), 用符號[]代碼沒有排序好的樹搜索
step1 找到「中」
- 前序遍歷:(4),3,1,2,8,7,16,10,9,14
- 中序遍歷:1,2,3,(4),7,8,9,10,14,16
- 後序遍歷:2,1,3,7,9,14,10,16,8,(4)
step2 將「中」放入中序遍歷,將數據分割成「左右」2部分
- 前序遍歷:(4),[3,1,2],[8,7,16,10,9,14]
- 中序遍歷:[1,2,3],(4),[7,8,9,10,14,16]
- 後序遍歷:[2,1,3],[7,9,14,10,16,8],(4)
樹結構爲: ([3,1,2] , 4 , [8,7,16,10,9,14])遍歷
step3 將step2中的「左」取出
- 前序遍歷:3,1,2
- 中序遍歷:1,2,3
- 後序遍歷:2,1,3
step4 再次執行1,2步驟
找到「中」=3,則「左」=[1,2] "右"=空數據
- 前序遍歷:(3),1,2
- 中序遍歷:1,2,(3)
- 後序遍歷:2,1,(3)
因此 [3,1,2] = ([1,2], 3, empty)block
取出 "左"的三組數列分割
- 前序遍歷:1,2
- 中序遍歷:1,2
- 後序遍歷:2,1
「中」=1, 則「左」=[] "右"=[2] 因此:([1,2], 3, empty) = ((empty,1,2),3,empty)
step5 取出「右」=[8,7,16,10,9,14],再次執行1,2步驟
- 前序遍歷:8,7,16,10,9,14
- 中序遍歷:7,8,9,10,14,16
- 後序遍歷:7,9,14,10,16,8
樹 (7,8,[9,10,14,16])
- 前序遍歷:16,10,9,14
- 中序遍歷:9,10,14,16
- 後序遍歷:9,14,10,16
樹 ((empty,7,empty),8,([9,10,14],16,empty))
- 前序遍歷:10,9,14
- 中序遍歷:9,10,14
- 後序遍歷:9,14,10
樹 ((empty,7,empty),8,((9,10,14),16,empty))
step6 合併
(((empty,1,2),3,empty),4,((empty,7,empty),8,((9,10,14),16,empty)))