카테고리 없음

LeetCode - 236. Lowest Common Ancestor of a Binary Tree

Kim David 2025. 5. 20. 17:16

 

 

문제 분석

이 문제는 이진 트리에서 두 노드 p,q가 주어졌을때, 가장 낮은 공통 조상을 찾는 문제임.

LCA: 어떤 두 노드의 가장 가까운 공통 조상

        3
       / \
      5   1
     / \ / \
    6  2 0  8
      / \
     7   4

만약 이 트리에서 p=5, q=1일때 공통 조상은 3이됨

p=5, q=4라면 공통 조상은 5가됨 (자기 자신이 조상이됨)

 

class Solution {

    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
      
        if (root == null || root == p || root == q) {
            return root;
        }

        TreeNode leftSub = lowestCommonAncestor(root.left, p, q);
        TreeNode rightSub = lowestCommonAncestor(root.right, p, q);

        if (leftSub != null && rightSub != null) {
            return root;
        }

        return leftSub != null ? leftSub : rightSub;



    }

}

 

해결 과정

 

종료조건을 설정해줍니다.

노드가 null(트리의 끝에 도달했을때)이거나 현재 노드가 입력된 p거나 q이면 해당 노드를 반환시켜줍니다.

TreeNode leftSub = lowestCommonAncestor(root. left, p, q);

TreeNode rightSub = lowestCommonAncestor(root.right, p, q);

현재 노드의 왼쪽, 오른쪽 자식 노드로 재귀적 탐색을 진행해줍니다.

-> 각각 p나 q가 발견되면 해당 노드가 위로 전달됨.

if (leftSub != null && rightSub != null) {

return root;

}

 

왼쪽과 오른쪽에서 각각 하나씩 노드가 발견된 경우에는 현재 root가 공통 조상

(p는 왼쪽 서브트리, q는 오른쪽 서브트리에서 발견됨)

 

return leftSub != null? leftSub : rightSub;

-> 만약 둘중 하나만 null이 아니면 그 노드를 계속 위로 전달해주기

-> 둘다 null이면 null이 리턴됨 -> 아무것도 찾지못함