输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
限制:
0 <= 节点个数 <= 5000
先序序列中依次出现的数字是根,在先序中找根,在中序中找到根的位置,根的位置左边是左子树,右边是右子树,划分出中序序列的左右子树。假设中序序列的左子树有n个结点,那么在先序的根中向后数n个数字,即为先序序列的左子树,后面的为先序序列的右子树,因此可划分出先序序列的左子树和先序序列的右子树。这样,先序的左子树和中序的左子树又重新构成一组先序遍历和中序遍历序列,右子树同理。因此可递归的找下去。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL