重建二叉树

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
        if(pre.size() == 0 || vin.size()==0 || pre.size()!=vin.size())
            return NULL;
        
        TreeNode *root = new TreeNode(pre[0]);
        int mid = find(vin.begin(), vin.end(), pre[0])-vin.begin();
        
        vector<int> left_pre(pre.begin()+1,pre.begin()+1+mid);
        vector<int> left_in(vin.begin(),vin.begin()+mid);
        vector<int> right_pre(pre.begin()+1+mid,pre.end());
        vector<int> right_in(vin.begin()+mid+1,vin.end());
        
        root->left = reConstructBinaryTree(left_pre,left_in);
        root->right = reConstructBinaryTree(right_pre,right_in);
        
        return root;
    }
};

重建二叉树

posted on 2017-02-26 22:31  123_123  阅读(130)  评论(0编辑  收藏  举报