[LeetCode] 236 Lowest Common Ancestor of a Binary Tree JavaScript
problem-solvingLeetCodeDFS트리이진트리LCA
📌 문제 설명
Lowest Common Ancestor of a Binary Tree 문제 보기
📌 문제 접근
처음에는 주석을 읽지 않아서 인덱스로 풀려고 했다. 알고 보니까 leetcode는 이따금 이렇게 객체로 주는 문제도 있다고 한다. 탐색하기 좋은 객체를 주었으니 그에 맞춰 풀면 된다. 자기 자신과 양 옆의 자식 노드를 가지고 있으므로, 재귀적으로 탐색하면 된다.
현재 노드가 그에 맞다면 return을 하고 아니면 null을 반환하여 부모 노드에게 전달하면 되는 간단한 문제.
📌 내가 작성한 코드
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @param {TreeNode} p
* @param {TreeNode} q
* @return {TreeNode}
*/
const lowestCommonAncestor = (root, p, q) => {
const dfs = (root) => {
if (!root || root === p || root === q) return root;
const left = dfs(root.left);
const right = dfs(root.right);
if (left && right) return root;
return left || right;
};
return dfs(root);
};
📌 시간 복잡도
O(N) - 모든 노드를 한 번씩 방문하므로 (N: 트리 노드 수)

