Given preorder and inorder traversal of a tree, construct the binary tree.
我以前的博文已有介绍构造二叉树
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
/**
*@param preorder : A list of integers that preorder traversal of a tree
*@param inorder : A list of integers that inorder traversal of a tree
*@return : Root of a tree
*/
public:
TreeNode *helper(vector<int> &preorder, int pL,int pR,vector<int> &inorder,int iL,int iR){
TreeNode *node=new TreeNode(preorder[pL]);
vector<int>::iterator it=find(inorder.begin(),inorder.end(),preorder[pL]);
int mid=it-inorder.begin();
if(mid==iL){
node->left=NULL;
}else{
node->left=helper(preorder,pL+1,pL+(mid-iL),inorder,iL,mid-1);
}
if(mid==iR){
node->right=NULL;
}else{
node->right=helper(preorder,pL+(mid-iL)+1,pR,inorder,mid+1,iR);
}
return node;
}
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
// write your code here
int len=preorder.size();
if(len==0){
return NULL;
}
return helper(preorder,0,len-1,inorder,0,len-1);
}
};