Palindrome Construct Binary Tree from Preorder and Inorder Traversal

// 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 };
原文地址:https://www.cnblogs.com/mengqingzhong/p/3116715.html