[LeetCode] Construct Binary Tree from Inorder and Postorder Traversal

2014-11-24 02:32:48 · 作者: · 浏览: 1
Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
问题描述:给定一个二叉树的中序遍历和后序遍历序列,构建这个二叉树。
同前面的从先序和中序构建二叉树类似。
class Solution {  
public:  
    typedef vector::iterator bt_iter;  
  
    TreeNode *build(bt_iter in_beg, bt_iter in_end, bt_iter post_beg, bt_iter post_end)  
    {  
        if(in_beg == in_end)  
            return NULL;  
  
        int root_val = *(post_end-1);  
        bt_iter rt_it = find(in_beg, in_end, root_val);  
        bt_iter left_end = post_beg + (rt_it - in_beg);  
  
        TreeNode *child_root = new TreeNode(root_val);  
        child_root->
left = build(in_beg, rt_it, post_beg, left_end); child_root->right = build(rt_it + 1, in_end, left_end, post_end - 1); return child_root; } TreeNode *buildTree(vector &inorder, vector &postorder) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. return build(inorder.begin(), inorder.end(), postorder.begin(), postorder.end()); } };