以上一篇的二叉树为例https://blog.csdn.net/u012093557/article/details/106496635
这个二叉树的前序、中序分别如下所示,
1, 2,3,4,5,6,7,8, 9,10,11,
4,3,2,6,5,8,7, 1, 10,9,11,
解题思路:前序遍历是根-》左-》右,那么第一个数一定是根节点,这里1就是根节点。中序遍历左-》根-》右,那么1拿到中序遍历就可以分割左、右子树,中序遍历左子树:4,3,2,6,5,8,7,右子树:10,9,11,。且可按照长度,在前序遍历结果中,可找到左子树前序遍历2,3,4,5,6,7,8,,右子树9,10,11,。分割子树完毕,子树是否可以再按照以上分析继续解析,此时如果可以,那么就形成了递归。接下来看一下代码实现
TwoTree* calATree(vector<int> preorderList,vector<int> middleOrderList)
{
// 前序的首位是根,根再分割中序可以找到左子树,右子树
if ((preorderList.size() != middleOrderList.size())