leetcode - Construct Binary Tree from Inorder and Postorder Traversal
2013-03-26 20:54 张汉生 阅读(272) 评论(0) 编辑 收藏 举报题目描述:点击此处
此题如果直接采用原来的BuildTree递归会有Memory limit Exceed
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 TreeNode * buildTree(vector<int>::iterator inBegin, vector<int>::iterator inEnd, 13 vector<int>::iterator postBegin, vector<int>::iterator postEnd){ 14 int val = *(postEnd-1); 15 TreeNode * root = new TreeNode(val); 16 vector<int>::iterator ii, jj; 17 vector<int> leftIn, leftPost, rightIn, rightPost; 18 for (ii=inBegin, jj=postBegin; ii!=inEnd && *ii!=val; ii++, jj++); 19 if (ii!=inBegin) 20 root->left = buildTree(inBegin, ii, postBegin, jj); 21 if (ii+1 != inEnd) 22 root->right = buildTree(ii+1, inEnd, jj, postEnd-1); 23 return root; 24 } 25 TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) { 26 // Start typing your C/C++ solution below 27 // DO NOT write int main() function 28 if (inorder.empty()) 29 return NULL; 30 return buildTree(inorder.begin(),inorder.end(),postorder.begin(), postorder.end()); 31 } 32 };