经典的二叉树构造的问题,例子:(注意题目中限定了,没有重复的元素),先序为2143,中序为1423
我们先手算一下,看看是如何构造的。先序第一个为2,则根为2,那么去中序中找2,就能够区分左右子树了。14在左子树,3在右子树。且左子树的先序序列为14,中序也为14.....可以分析出来这是一个递归的过程。手工算到最后,很容易构造出二叉树。
故递归函数必须要有preL,preR,inL,inR这些参数,作为当前的先序中序序列的左右区间。先根据先序第一个值找到根,再去中序中找相等的值(假设下标为k),区分左右子树即可,关键是要计算正确左右子树的范围。左子树的节点数numLeft=k-inL
一般性的过程如下,inL,inR,preL,preR均为数组下标