[数据结构][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)))

相关文章
相关标签/搜索