题目:Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
由中序和后序遍历的结构重构二叉树,且没有重复。思路跟上一篇文章差不多,只是要从后序遍历的最后开始作为根节点,然后先构造右子树再左子树。
TreeNode * aftercenTotree(vector<int> &after, vector<int> &cen, int begin, int &mid, int end)
{
TreeNode *root=NULL;
if(begin>end-1)
return root;
int i=begin;
for(; i<end; i++)
if( cen[i] ==after[mid] ) break;
if(i==end) return root ;
root=new TreeNode(after[mid]);
mid--;
root->right=aftercenTotree(after, cen, i+1, mid, end);
root->left=aftercenTotree(after, cen, begin, mid, i);
return root;
}
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder)
{
int mid=postorder.size()-1;
return aftercenTotree(postorder, inorder, 0, mid, postorder.size());
}