Given inorder and postorder traversal of a tree, construct the binary tree.
Note:You may assume that duplicates do not exist in the tree.
解法:递归求解,思路同上一篇博客中用先序和中序构造二叉树类似。
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 TreeNode *buildTree(vector<int> &postorder,int ph, int pe, vector<int> &inorder, int ih, int ie){ 12 TreeNode *root; 13 if(pe - ph < 0){ 14 return NULL; 15 } 16 root = new TreeNode(postorder[pe]); 17 int index = ih-1; 18 while(++index <= ie && inorder[index] != postorder[pe]){ 19 } 20 int leftPostLen = index - ih; 21 root->left = buildTree(postorder, ph, ph+leftPostLen-1, inorder, ih, index-1); 22 root->right = buildTree(postorder, ph+leftPostLen, pe-1, inorder, index+1, ie); 23 return root; 24 } 25 26 public: 27 TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) { 28 // Start typing your C/C++ solution below 29 // DO NOT write int main() function 30 return buildTree(postorder, 0, postorder.size()-1, inorder, 0, inorder.size()-1); 31 } 32 };
Run Status: Accepted!
Program Runtime: 152 milli secs
Progress: 202/202 test cases passed.