티스토리 뷰
Algorithm/LeetCode
[LeetCode] 236. Lowest Common Ancestor of a Binary Tree
Jaime.Lee 2023. 7. 14. 01:27Problem
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”
Example 1:
Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
Output: 3
Explanation: The LCA of nodes 5 and 1 is 3.
Example 2:
Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
Output: 5
Explanation: The LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.
Example 3:
Input: root = [1,2], p = 1, q = 2
Output: 1
Constraints:
- The number of nodes in the tree is in the range [2, 10^5].
- -10^9 <= Node.val <= 10^9
- All Node.val are unique.
- p != q
- p and q will exist in the tree.
Solution
이진 트리와 두 노드가 주어질 때 LCA (Lowest Common Ancestor; 최소 공통 조상)를 구하는 문제입니다.
package io.lcalmsky.leetcode.lowest_common_ancestor_of_a_binary_tree;
import io.lcalmsky.leetcode.TreeNode;
import java.util.Optional;
public class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root == null || root == p || root == q) {
return root;
}
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
if (left != null && right != null) {
return root;
}
return Optional.ofNullable(left).orElse(right);
}
}
- 먼저, 주어진 root가 null이거나 p와 q 중 하나와 동일한 경우, 현재 root가 가장 낮은 공통 조상이므로 root를 반환합니다.
- 그렇지 않은 경우, 현재 노드를 기준으로 왼쪽 서브트리와 오른쪽 서브트리에 대해 재귀적으로 lowestCommonAncestor 메서드를 호출합니다. 이를 통해 p와 q의 가장 낮은 공통 조상을 찾습니다.
- 왼쪽 서브트리에서 반환된 결과를 left에 저장하고, 오른쪽 서브트리에서 반환된 결과를 right에 저장합니다.
- 만약 left와 right가 모두 null이 아니라면, 즉, 현재 노드를 기준으로 p와 q가 왼쪽 서브트리와 오른쪽 서브트리에 모두 존재한다면, 현재 노드가 가장 낮은 공통 조상이 됩니다. 따라서 현재 root를 반환합니다.
- 그렇지 않은 경우, left와 right 중 null이 아닌 값을 선택하여 반환합니다. Optional.ofNullable을 사용하여 null일 경우에도 결과를 반환할 수 있도록 처리합니다. 만약 left가 null이라면 right가 반환되고, right가 null이라면 left가 반환됩니다.
Test
TreeNode를 제대로 구현하지 못해 테스트 코드 작성에 실패하였습니다😭
'Algorithm > LeetCode' 카테고리의 다른 글
[LeetCode] 238. Product of Array Except Self (0) | 2023.07.16 |
---|---|
[LeetCode] 34. Find First and Last Position of Element in Sorted Array (0) | 2023.07.15 |
[LeetCode] 207. Course Schedule (0) | 2023.07.13 |
[LeetCode] 139. Word Break (1) | 2023.07.12 |
[LeetCode] 3. Longest Substring Without Repeating Characters (0) | 2023.07.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 클린 아키텍처
- 헥사고날 아키텍처
- 스프링 부트 튜토리얼
- Spring Data JPA
- 스프링 부트 회원 가입
- 알고리즘
- spring boot app
- gRPC
- Spring Boot Tutorial
- Linux
- QueryDSL
- 스프링 부트
- spring boot jwt
- spring boot application
- 스프링 부트 애플리케이션
- 스프링 데이터 jpa
- Jackson
- r
- intellij
- proto3
- JPA
- Java
- leetcode
- JSON
- Spring Boot JPA
- 함께 자라기
- 함께 자라기 후기
- Spring Boot
- 스프링부트
- @ManyToOne
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함