Overview
Validate Binary Search Tree
주어진 이진 트리가 이진 탐색 트리인지 판단하라
Failure
처음에는 트리의 일부 역시 트리가 되기 때문에 모든 노드에서 자신과 자식 노드만 확인하면 될 것 같았다.
하지만, 부모 노드와는 이진 탐색 트리를 만들지만 그 위의 노드(들)와는 이진 탐색 트리가 되지 않는 경우가 있었다.
Solution
각 노드마다 Lower/Upper Bound를 설정하는 방법으로 해결 가능하다. 특히 탐색 방향이 바뀌는 경우(Left -> Right 혹은 Right -> Left)의 경우의 Boundary 설정이 중요하다.
구현해보진 않았지만 매 탐색 시 탐색 방향을 인자로 보내, 탐색 방향이 바뀔 때만 적절히 처리해도 될 것 같긴 하다.
Minimum Depth of Binary Tree
이진 트리에서 최소 깊이를 구하라
Solution
각 노드에서 자식 노드에서 얻을 수 있는 최소 깊이를 구한다.
int minDepth(TreeNode* root) {
if (!root) return 0;
int L = minDepth(root->left), R = minDepth(root->right);
return 1 + (min(L, R) ? min(L, R) : max(L, R));
}
Sparse Arrays
- N개의 문자열을 입력 받아 저장한다.
- M개의 문자열을 입력 받으며 저장된 문자열에 입력 받은 문자열이 몇 번 등장했는지 구하라
Solution
해시 테이블 등 Key-Value 형태로 자료를 저장할 수 있는 자료구조를 사용하여 {문자열, 등장횟수} 를 저장하면 된다.