这种题一般有二种形式,共同点是都已知中序序列。如果没有中序序列,是无法唯一确定一棵树的。
<1>已知二叉树的前序序列和中序序列,求解树。
1、确定树的根节点。树根是当前树中所有元素在前序遍历中最先出现的元素。
2、求解树的子树。找出根节点在中序遍历中的位置,根左边的所有元素就是左子树,根右边的所有元素就是右子树。若根节点左边或右边为空,则该方向子树为空;若根节点
边和右边都为空,则根节点已经为叶子节点。
3、递归求解树。将左子树和右子树分别看成一棵二叉树,重复1、2、3步,直到所有的节点完成定位。
<2>、已知二叉树的后序序列和中序序列,求解树。
1、确定树的根。树根是当前树中所有元素在后序遍历中最后出现的元素。
2、求解树的子树。找出根节点在中序遍历中的位置,根左边的所有元素就是左子树,根右边的所有元素就是右子树。若根节点左边或右边为空,则该方向子树为空;若根节点
边和右边都为空,则根节点已经为叶子节点。
3、递归求解树。将左子树和右子树分别看成一棵二叉树,重复1、2、3步,直到所有的节点完成定位。
测试用例:
<1>先序 中序 求 后序
输入:
先序序列:ABCDEGF
中序序列:CBEGDFA
输出后序:CGEFDBA
代码:
主函数调用:
另一种算法:
具体讲解请看:点击打开链接
<2>中序 后序 求先序
输入:
中序序列:CBEGDFA
后序序列:CGEFDBA
输出先序:ABCDEGF
代码:
完整代码:
经典白话算法之二叉树中序前序序列(或后序)求解树,布布扣,bubuko.com
原文地址:http://blog.csdn.net/sunnyyoona/article/details/24903815