LeetCode-Construct Binary Tree from Inorder and Postorder Traversal-中序后序重构二叉树-递归

https://oj.leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/

递归,每次找后序的最后一个元素,然后按中序将其分为两部分即可。

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int n;
    vector<int> in;
    vector<int> po;
    TreeNode *Solve(int l1,int r1,int l2,int r2){
        if(l1==r1 || l2==r2) return NULL;
        int val=po[r2-1];
        TreeNode *cur=new TreeNode(val);
        int p=find(in.begin(),in.end(),val)-in.begin();
        cur->left=Solve(l1,p,l2,l2+p-l1);
        cur->right=Solve(p+1,r1,l2+p-l1,r2-1);
        return cur;
    }
    TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
        in=inorder;
        po=postorder;
        n=in.size();
        return Solve(0,n,0,n);
    }
};

  

posted @ 2014-10-11 17:30  zombies  阅读(172)  评论(0编辑  收藏  举报