输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
首先明确什么是前序遍历和中序遍历以及后序遍历,所谓的前、中、后序遍历描述的都是根(中间)节点的遍历顺序,比如:
前序遍历结果是:1、2、4、5、3、6、7(中左右)
中序遍历结果是:4、2、5、1、6、3、7(左中右)
后序遍历结果是:4、5、2、6、7、3、1(左右中)
现在要根据前序遍历和中序遍历的结果复原二叉树,流程如下:
首先从前序遍历中拿出第一个,其一定是根节点对应的值,然后以其为分界点将中序遍历分为left和right两部分对应其左子树和右子树,然后将left和right当做新的中序遍历的结果,从前序遍历中拿出前len(left)个当做新的左子树的前序遍历结果,拿出后len(right)当做新的右子树的前序遍历结果,递归求解其left和right对应的二叉树,这样最终即可恢复整棵树。