还原二叉树--已知先序中序或者后序中序
首先,我们看看前序、中序、后序遍历的特性: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 (个人觉得这个命名略微有误导性,因为前序的“前”容易让人误会成树的最前边(视觉上的左边)。记住前序遍历就是最直接(直觉上的)遍历——中左右) 中序遍历: 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 (同样是有误导性的名字。 遍历顺序——左中右) 后序遍历: 1.后序遍历左子树 2.后序遍历右子树 3.访问根节点 (同样是有误导性的名字,“后”字没有任何意义,所有二叉树的遍历,左边一定在右边的之前进行遍历。 遍历顺序——左右中。) 接着,铭记总的方针 1. 找到根节点,确定左子树,确定右子树 (最重要) 2. 对左子树进行递归分析 3.对右子树进行递归分析 一、已知先序、中序遍历,求后序遍历 例: 先序遍历: GDAFEMHZ 中序遍历: ADEFGHMZ 思路分析: 1. 根据先序遍历的特点——中左右,第一个元素一定是根节点,所以立刻确定G是根节点。 2. 既然确定了G是根节点,再根据中序遍历的特点——左中右,在根节点G之前的ADEF就是左子树,根节点G之后的HMZ就是右子树。 3.接着分析左子树(思路和第1,2步一样)。把左子树的所有元素(即 ADEF这四个元素 )在先序遍历和中序遍历中的顺序拿出来进行比较。 先序的顺序是 DAFE (中左右)