STUDY/Algorithm

[LeetCode] 235. Lowest Common Ancestor of a Binary Search Tree, C++

sinawi95 2022. 8. 13. 15:16
728x90

https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/submissions/

 

Lowest Common Ancestor of a Binary Search Tree - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

이진 탐색 트리에서 가장 가까운 공통 조상을 찾는 문제이다.

알고리즘 순서는 다음과 같다.
1. 주어진 root를 시작으로 BFS를 진행한다.
1-1. 이 때 unordered_map을 사용해서 parent 정보를 저장하고 방문체크를 위한 visit을 초기화한다.
2. parent를 사용해서 노드 p부터 root까지 방문 체크를 한다.
3. 노드 q부터 조상을 탐색하며 방문 체크가 된 지점을 반환한다.

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        unordered_map<int, TreeNode*> parent;
        unordered_map<int, bool> visit;
        parent[root->val] = NULL;
        visit[root->val] = false;

        TreeNode* curNode;
        
        queue<TreeNode*> que;
        que.push(root);
        while (!que.empty()) {
            curNode = que.front();
            que.pop();
            if (!curNode) continue;
            
            que.push(curNode->left);
            que.push(curNode->right);
            
            if (curNode->left){
                parent[curNode->left->val] = curNode;    
                visit[curNode->left->val] = false;
            }
            if (curNode->right){
                parent[curNode->right->val] = curNode;            
                visit[curNode->right->val] = false;
            }
        }
        curNode = p;
        while (curNode){
            visit[curNode->val] = true;
            curNode = parent[curNode->val];
        }
        curNode = q;
        while (!visit[curNode->val]){
            curNode = parent[curNode->val];
        }
        
        return curNode;
    }
};

 

 


이번주부터 다시 알고리즘 공부 시작

leetcode 첫 문제이고 쉬워보여서 접근했으나 혼쭐이 난 문제이다. 어제부터 잡고있던 문제인데 bruteforce의 방식으로 모든 조상을 확인하는 방식으로 진행했다.