Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
/** * 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 *build(vector<int>&in,int instart,int inend,vector<int>&post,int poststart,int postend) { if(postend<poststart||inend<instart||(postend-poststart)!=(inend-instart)) return NULL; TreeNode *head = new TreeNode(post[postend]); int rootpos; for(int i=0;i<=inend-instart;i++) if(in[i+instart]==post[postend]) { rootpos = i; break; } head->left = build(in,instart,instart+rootpos-1,post,poststart,poststart+rootpos-1); head->right = build(in,instart+rootpos+1,inend,post,poststart+rootpos,postend-1); return head; } TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) { int postsize = postorder.size(); int insize = inorder.size(); TreeNode *head = build(inorder,0,insize-1,postorder,0,postsize-1); return head; } };