Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Kubernetes
- POD
- 쿠버네티스
- asyncio
- terraform
- 자바스크립트
- asgi
- EKS
- leetcode
- Deployment
- AWS
- Service
- github
- Django
- IAM
- Python
- K8S
- event loop
- intervals
- elasticsearch
- YAML
- IAC
- dockerfile
- FastAPI
- docker
- kernel
- ansible
- WSGI
- EC2
- ebs
Archives
- Today
- Total
궁금한게 많은 개발자 노트
[ leetcode ] 236. Lowest Common Ancestor of a Binary Tree 본문
해당 문제는 이진 트리(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;
}
};
'Algorithm' 카테고리의 다른 글
[ leetcode ] 1288. Remove Covered Intervals (0) | 2023.05.02 |
---|---|
[ leetcode ] 56. Merge Intervals (0) | 2023.05.02 |
[ leetcode ] 1046. Last Stone Weight (0) | 2023.05.02 |
[ leetcode ] 235. Lowest Common Ancestor of a Binary Search Tree (0) | 2023.05.02 |
[ 자료구조 ] Heap (0) | 2020.06.14 |
Comments