输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:TreeNode* _buildTree(vector<int>& preorder, vector<int>& inorder,int& prei,int inbegin,int inend){if(inbegin>inend)return NULL;TreeNode* root=new TreeNode(preorder[prei]);int rooti=inbegin;while(rooti<=inend){if(preorder[prei]==inorder[rooti])break;else++rooti;}if(inbegin<=rooti-1)root->left= _buildTree(preorder,inorder,++prei,inbegin,rooti-1);elseroot->left=NULL;if(rooti+1<=inend)root->right=_buildTree(preorder,inorder,++prei,rooti+1,inend);elseroot->right=NULL;return root;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {int inbegin=0;int prei= 0;int inend=inorder.size()-1;return _buildTree(preorder,inorder,prei,inbegin,inend);}
};