검지 Offer:04-두 갈래 나무 재구성

1494 단어

제목 설명


두 갈래 나무의 앞 순서와 중간 순서의 결과를 입력하십시오. 이 두 갈래 나무를 다시 만드십시오.입력한 앞 순서와 중간 순서의 결과에 중복된 숫자가 없다고 가정하십시오.예를 들어 앞 순서 반복 시퀀스 {1,2,4,7,3,5,6,8}와 중간 순서 반복 시퀀스 {4,7,2,1,5,3,8,6}를 입력하면 두 갈래 트리를 재건하고 되돌려줍니다.

생각


실현

/**
 * 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 pre,vector vin) {
        int len = pre.size();
        if(len != vin.size())
            return nullptr;
        if(len == 0)
            return nullptr;
        // , 
        int rootvalue = pre[0];
        // 
        int rootposinvin = 0;
        for(; rootposinvin < len; rootposinvin++)
            if(vin[rootposinvin] == rootvalue)
                break;
        
        // 
        TreeNode* root = new TreeNode(rootvalue);
        vector leftpre(pre.begin() + 1, pre.begin() + 1 + rootposinvin);
        vector leftvin(vin.begin(), vin.begin() + rootposinvin);
        
        vector rightpre(pre.begin() + 1 + rootposinvin, pre.end());
        vector rightvin(vin.begin() + rootposinvin + 1, vin.end());
        
        root->left = reConstructBinaryTree(leftpre, leftvin);
        root->right = reConstructBinaryTree(rightpre, rightvin);
        
        return root;
    }
};

좋은 웹페이지 즐겨찾기