궁금한게 많은 개발자 노트

[ leetcode ] 236. Lowest Common Ancestor of a Binary Tree 본문

Algorithm

[ leetcode ] 236. Lowest Common Ancestor of a Binary Tree

궁금한게 많은 개발자 2023. 5. 2. 10:53

해당 문제는 이진 트리(Binary Tree)가 주어졌을 때, 서로 다른 두 노드의 가장 낮은 레벨의 공통 조상을 찾는 문제입니다.

BST가 아닌 BT이기 때문에 BST의 조건을 이용하지 못하는 상황입니다. 문제의 제약 조건에서 서로 다른 두 노드는 항상 트리 내에 존재함을 보장합니다.

이 때는 재귀적으로 왼쪽 자식, 오른쪽 자식을 반환하면서 둘다 NULL이 아닌 경우는 해당 노드의 아래에 존재한다는 의미이므로 해당 노드가 LCA가 됩니다.

해당 노드와 p또는 q의 value와 같아서 윗레벨로 반환 된 경우 root에서 왼쪽만 NULL이 아니고 오른쪽은 NUL일 경우 왼쪽 자식의 더 아래에 한 노드가 존재한다는 의미이므로 반환된 왼쪽 노드가 LCA입니다.

/**
 * 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) {
    	if (root->val == p->val || root->val == q->val) return root;
        TreeNode* left_child = lowestCommonAncestor(root->left, p, q);
        TreeNode* right_child = lowestCommonAncestor(root->right, p, q);
        
        if (!left_child && !right_child) return root;
        return left_child ? left_child : right_child;
    }
};
Comments