TreeNode*solve(vector<int>& midorder,int x,int y, vector<int>& lastorder,int i,int j){if(x > y || i > j){returnNULL;}
TreeNode* root =new TreeNode;
root->val = lastorder[j];for(int k = x; k <= y; k++){if(midorder[k]== lastorder[j]){//k-x代表中序遍历中根节点的左子树长度
root->left =solve(midorder, x, k -1, lastorder, i, i + k - x -1);
root->right =solve(midorder, k +1, y, lastorder, i + k - x, j -1);break;}}return root;}
前序+中序构造二叉数
TreeNode*buildTree(vector<int>& preorder, vector<int>& inorder){// write code herereturnsolve(inorder,0, inorder.size()-1,preorder,0, preorder.size()-1);}
TreeNode*solve(vector<int>& midorder,int x,int y, vector<int>& firstorder,int i,int j){if(x > y || i > j){returnNULL;}
TreeNode* root =newTreeNode(0);
root->val = firstorder[i];for(int k = x; k <= y; k++){if(midorder[k]== firstorder[i]){//k-x代表中序遍历中根节点的左子树长度
root->left =solve(midorder, x, k -1, firstorder, i+1, i+k-x);
root->right =solve(midorder, k +1, y, firstorder, i + k - x+1, j);break;}}return root;}