// 156ms 过大的
1
/** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 13 TreeNode *buildTree(vector<int> &preorder,int pb,int pe, vector<int> &inorder,int ib,int ie) 14 { 15 TreeNode *root=new TreeNode(0); 16 root->val=preorder[pb]; 17 18 vector<int>::iterator proot=find(inorder.begin(),inorder.end(),root->val); 19 int pos=proot-inorder.begin(); 20 21 int leftLen=pos-ib; 22 int rightLen=ie-pos; 23 24 if(leftLen>0) 25 root->left=buildTree(preorder,pb+1,pb+leftLen,inorder,ib,pos-1); 26 if(rightLen>0) 27 root->right=buildTree(preorder,pb+leftLen+1,pe,inorder,pos+1,ie); 28 return root; 29 } 30 31 TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) { 32 // Start typing your C/C++ solution below 33 // DO NOT write int main() function 34 if(preorder.size()==0) 35 return NULL; 36 return buildTree(preorder,0,preorder.size()-1,inorder,0,preorder.size()-1); 37 } 38 };

 

posted on 2013-06-04 11:03  宇睿  阅读(150)  评论(0编辑  收藏  举报