[數據結構][BST](二叉搜索樹)已知前中後序遍歷結果,求二叉樹問題

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

思路:排序

  1. 經過前序遍歷算法和後序遍歷算法知道「中」是誰,
  2. 找到中序遍歷數據的「中」,分割成「左」「右」2部分
  3. 對「左」「右」單獨執行一、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)))

相關文章
相關標籤/搜索