코테준비 - Construct Binary Tree from Preorder and Inorder Traversal

정상화·2023년 2월 26일

LeetCode

목록 보기
102/222

Construct Binary Tree from Preorder and Inorder Traversal

class Solution {
public:
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        unordered_map<int, int> inOrderIdx;
        map<int,int> found;
        unordered_map<int, TreeNode*> numberNode;
        for (int i = 0; i< inorder.size(); i++) {
            inOrderIdx[inorder[i]] = i;
        }
        TreeNode *root = new TreeNode(preorder[0]);
        numberNode[root->val] = root;
        found[inOrderIdx[root->val]] = root->val;
        for (int i = 1; i < preorder.size(); i++) {
            auto prevNum = preorder[i-1];
            auto curNum = preorder[i];
            auto curNode = new TreeNode(curNum);
            numberNode[curNum] = curNode;
            found[inOrderIdx[curNum]] = curNum;
            if (inOrderIdx[curNum] < inOrderIdx[prevNum]) {
                numberNode[prevNum]->left = curNode;
            } else {
                numberNode[prev(found.find(inOrderIdx[curNum]))->second]->right = curNode;
            }
        }
        return root;
    }
};
profile
백엔드 희망

0개의 댓글