扩展问题:
1.用栈实现
把递归版本中每次递归所需参数打包,放到单独结构体里。依次压栈出栈。
2.字母可能相同及如何判断给定遍历结果合理
列举所有可能情况,之后进行剪枝。在pInOrder里找不到pPreOrder的首字母时,遍历结果不合理。
3.前序和后序遍历结果重建二叉树
1)完全二叉树:可以。
每次取pPostOrder尾字母,若等于pPreOrder首字母,则此字母为当前子树根节点;若不等,则在pPreOrder中找到此字母,并以此为界划分为左右两棵子树,分别递归处理。
2)非完全二叉树:不可以。
举例:已知pPreOrder: a b 和 pPostOrder: b a 时并不能唯一判断b是在a的左子树或右子树上,即pPostOrder: b a 或 a b
注:
pPreOrder 前序遍历结果
pInOrder 中序遍历结果
pPostOrder 后序遍历结果