顺便写下后序和中序建树吧,都前面的大同小异。
代码:
/**
* Definition for binary tree
* 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 build(inorder,postorder,0,postorder.size()-1,0,inorder.size()-1);
}
TreeNode *build(vector<int> &inorder,vector<int> &postorder,int l1,int r1,int l2,int r2){
if(l1>r1)
return NULL;
int val=postorder[r1];
int index=l2,cnt=0;
for(;index<r2&&inorder[index]!=val;index++,cnt++);
TreeNode *tem=new TreeNode(val);
tem->left=build(inorder,postorder,l1,l1+cnt-1,l2,index-1);
tem->right=build(inorder,postorder,l1+cnt,r1-1,index+1,r2);
return tem;
}
};