描述
给出一棵树的前序遍历和中序遍历,请构造这颗二叉树
注意:
可以假设树中不存在重复的节点
示例1
输入:
[1,2],[1,2]
返回值:
{1,#,2}
示例2
输入:
[1,2,3],[2,3,1]
返回值:
{1,2,#,#,3}
class Solution { public: TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) { return build(preorder,inorder,0,preorder.size()-1,0,preorder.size()-1); } TreeNode *build(vector<int> &preorder, vector<int> &inorder,int l1,int r1,int l2,int r2) { if(l1>r1) return NULL; int gen=preorder[l1],i,cnt=0; for(i=l2;i<=r2&&inorder[i]!=gen;cnt++,i++); TreeNode *root=(TreeNode *)malloc(sizeof(TreeNode)); root->val=gen; root->left=build(preorder,inorder,l1+1,l1+cnt,l2,i-1); root->right=build(preorder,inorder,l1+1+cnt,r1,i+1,r2); return root; } };