LeetCode-Construct Binary Tree from Preorder and Inorder Traversal-前序中序恢复二叉树-递归

https://oj.leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-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,m;
    vector<int> pr;
    vector<int> in;
    TreeNode *Solve(int l1,int r1,int l2,int r2){
        if (l1==r1) return NULL;
        int val=pr[l1];
        TreeNode *cur=new TreeNode(val);
        int p=find(in.begin()+l2,in.begin()+r2,val)-in.begin();
        cur->left=Solve(l1+1,l1+1+p-l2,l2,p);
        cur->right=Solve(l1+1+p-l2,r1,p+1,r2);
        return cur;
    }
    TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
        pr=preorder;
        in=inorder;
        n=pr.size();
        return Solve(0,n,0,n);
    }
};

  

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