Leetcode Java Lowest Common Ancestor of a Binary Tree
업데이트:
문제
코드
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root == null || root == p || root == q) {
return root;
} else {
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
if (left == null) {
return right;
} else if (right == null) {
return left;
} else {
return root;
}
}
}
}
결과
설명
-
지난번 Lowest Common Ancestor of a Binary Search Tree와 비슷한 문제로, 주어진 이진 트리인 root에서 TreeNode p와 q의 최소의 공통된 부모 노드인 LCA를 찾는 문제이다.
-
root가 null이면 진행이 불가능하고, p와 q 중 하나의 TreeNode가 root와 동일한 경우 최상위인 root가 최소의 공통된 부모 노드이므로 root를 주어진 문제의 결과로 반환한다.
-
그 외의 경우 root의 left와 right TreeNode를 이용하여 각각 재귀 호출한 결과를 left와 right에 넣어준다.
-
left와 right의 결과에 따라 주어진 문제의 결과를 반환한다.
- left가 null인 경우 left TreeNode를 기준으로 p와 q의 최소의 공통된 부모 노드를 찾지 못했으므로, right를 주어진 문제의 결과로 반환한다.
- right가 null인 경우 right TreeNode를 기준으로 p와 q의 최소의 공통된 부모 노드를 찾지 못했으므로, left를 주어진 문제의 결과로 반환한다.
- left와 right가 둘 다 null인 경우 p와 q의 최소의 공통된 부모 노드가 root밖에 존재하지 않으므로, root를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기