一、已知二叉树的前序遍历和中序遍历,求后序遍历
方法
- 确定树的根节点。树根是当前树中所有元素在前序遍历中最先出现的元素。
- 求解树的子树。找出根节点在中序遍历中的位置,根左边的所有元素就是左子树,根右边的所有元素就是右子树。若根节点左边或右边为空,则该方向子树为空;若根节点左边和右边都为空,则根节点已经为叶子节点。
- 递归求解树。将左子树和右子树分别看成一棵二叉树,重复1、2、3步,直到所有的节点完成定位。
已知
- 前序遍历:GDAFEMHZ
- 中序遍历:ADEFGHMZ
步骤
- 在前序遍历GDAFEMHZ中最先出现的元素为G,ADEF|G|HMZ
- 在前序遍历DAFE中最先出现的元素为D,A|D|EF|G|HMZ
- 在前序遍历FE中最先出现的元素为F,A|D|E|F|G|HMZ
- 在前序遍历MHZ中最先出现的元素为M,A|D|E|F|G|H|M|Z
还原
![](https://i-blog.csdnimg.cn/blog_migrate/43545e784472d35252849d8519bf0744.jpeg)
附例
- 已知
- 中序遍历:ADEFGHMZ
- 后序遍历:AEFDHZMG
结果:前序遍历:GDAFEMHZ
二、已知二叉树的后序遍历和中序遍历,求前序遍历
方法
- 确定树的根。树根是当前树中所有元素在后序遍历中最后出现的元素。
- 求解树的子树。找出根节点在中序遍历中的位置,根左边的所有元素就是左子树,根右边的所有元素就是右子树。若根节点左边或右边为空,则该方向子树为空;若根节点左边和右边都为空,则根节点已经为叶子节点。
- 递归求解树。将左子树和右子树分别看成一棵二叉树,重复1、2、3步,直到所有的节点完成定位。
已知
- 中序序列 HLDBEKAFCG
- 后序序列 LHDKEBFGCA
步骤
- 在后序序列LHDKEBFGCA中最后出现的元素为A,HLDBEK|A|FCG
- 在后序序列LHDKEB中最后出现的元素为B,HLD|B|EK|A|FCG
- 在后序序列LHD中最后出现的元素为D,HL|D|B|EK|A|FCG
- 在后序序列LH中最后出现的元素为H,H|L|D|B|EK|A|FCG
- 在后序序列KE中最后出现的元素为E,H|L|D|B|E|K|A|FCG
- 在后序序列FGC中最后出现的元素为C,H|L|D|B|E|K|A|F|C|G
- 所有元素都已经定位,二叉树求解完成。
还原
A/ \
B C
/ \ / \
D E F G
/ \
H K
\
L