LeetCode - Construct Binary Tree from inorder and postorder Traversal
阿新 • • 發佈:2018-11-08
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { return helper(inorder, 0, inorder.size()-1, postorder, 0, postorder.size()-1); } TreeNode* helper(vector<int>& inorder, int il, int ir, vector<int>& postorder, int pl, int pr){ if(il>ir || pl>pr) return NULL; int val = postorder[pr]; TreeNode* cur = new TreeNode(val); int cnt = 0; for(int i=il;i<ir;i++){ if(inorder[i]==val) break; cnt++; } cur->left = helper(inorder, il, il+cnt-1, postorder, pl, pl+cnt-1); cur->right = helper(inorder, il+cnt+1, ir, postorder, pl+cnt, pr-1); return cur; } };