前序与中序遍历序列构造二叉树
/**
* 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) {
return pre_order(0,preorder.size()-1,0,inorder.size()-1,preorder,inorder);
}
TreeNode* pre_order(int prel,int prer,int inl,int inr,vector<int>& preorder, vector<int>& inorder){
if(prel>prer||inl>inr) return NULL;
TreeNode* root=new TreeNode(preorder[prel]);
int index;
for(index=0;index<inorder.size();index++){
if(inorder[index]==root->val) break;
}
int inleft = index - inl;
root->left=pre_order(prel+1,prel+inleft,inl,index-1,preorder,inorder);
root->right=pre_order(prel+inleft+1,prer,index+1,inr,preorder,inorder);
return root;
}
};
/**
* 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>& inorder, vector<int>& postorder) {
return post_order(0,inorder.size()-1,0,postorder.size()-1,inorder,postorder);
}
TreeNode* post_order(int inl,int inr,int postl,int postr,vector<int>& inorder, vector<int>& postorder){
if(inl>inr||postl>postr) return NULL;
TreeNode* root=new TreeNode(postorder[postr]);
int index;
for(index=0;index<inorder.size();index++){
if(inorder[index]==root->val) break;
}
int inleft=index-inl;
root->left=post_order(inl,index-1,postl,postl+inleft-1,inorder,postorder);
root->right=post_order(index+1,inr,postl+inleft,postr-1,inorder,postorder);
return root;
}
};