后序遍历序列的不同在于,取的是序列的最后一位。
/** * 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) { int sz = inorder.size(); return build(inorder, 0, sz - 1, postorder, 0, sz - 1); } TreeNode* build(vector<int>& inorder, int inStart, int inEnd, vector<int>& postorder, int postStart, int postEnd){ if(postStart > postEnd) return NULL; int sz = inorder.size(); int rootVal = postorder[postEnd]; int pivol; for(int i=0;i<sz;i++){ if(inorder[i]==rootVal){ pivol = i; break; } } int leftsz = pivol - inStart; TreeNode* root = new TreeNode(rootVal); root->left = build(inorder, inStart, pivol - 1, postorder, postStart, postStart + leftsz - 1); root->right = build(inorder, pivol + 1, inEnd, postorder, postStart + leftsz, postEnd - 1); return root; } };