输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
/**
* 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);
else
root->left=NULL;
if(rooti+1<=inend)
root->right=_buildTree(preorder,inorder,++prei,rooti+1,inend);
else
root->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);
}
};