넘치게 채우기
[LeetCode] 988. Smallest String Starting From Leaf 본문
https://leetcode.com/problems/smallest-string-starting-from-leaf/description/
Leetcode - Smallest String Starting From Leaf
문제 유형 : 이진트리, 재귀, dfs
문제 난이도 : Medium
문제
You are given the root of a binary tree where each node has a value in the range [0, 25] representing the letters 'a' to 'z'.
Return the lexicographically smallest string that starts at a leaf of this tree and ends at the root.
As a reminder, any shorter prefix of a string is lexicographically smaller.
- For example, "ab" is lexicographically smaller than "aba".
A leaf of a node is a node that has no children.
이진트리의 루트가 주어집니다. 노드의 값은 0~25까지 있습니다. a부터 z까지를 의미합니다.
트리의 잎 노드 -> 루트 노드까지의 경로의 문자열들 중, 사전순으로 가장 먼저 오는 문자열을 구하시오.
예를 들면, ab는 aba보다 앞입니다.
풀이
순회하는 재귀 함수의 파라미터로, 서브트리의 root와 현재 root를 포함하는 최상위 root -> 현재 서브트리 root까지 만들어진 문자열을 사용합니다.
만약 현재가 리프노드라면, 파라미터의 문자열을 뒤집어서 반환합니다.
아니라면, 서브트리를 더 내려가면서,
왼쪽과 오른쪽 각각 순회한 뒤, 사전순으로 더 작은 반환값을 반환시킵니다.
코드
C++
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
string solve(TreeNode* root, string str) {
if(root -> left == NULL && root -> right == NULL) {
reverse(str.begin(), str.end());
return str;
}
string left = "";
string right = "";
if(root -> left) {
char leftch = root -> left -> val + 'a';
left = solve(root -> left, str + leftch);
}
if(root -> right) {
char rightch = root -> right -> val + 'a';
right = solve(root -> right, str + rightch);
}
if(left == "") return right;
else if(right == "") return left;
if(left < right) return left;
return right;
}
string smallestFromLeaf(TreeNode* root) {
char ch = 'a' + root -> val;
string str = "";
return solve(root, str + ch);
}
};
'PS > LeetCode' 카테고리의 다른 글
[LeetCode] 200. Number of Islands (0) | 2024.04.19 |
---|---|
[LeetCode] 463. Island Perimeter (0) | 2024.04.18 |
[LeetCode] 623. Add One Row to Tree (0) | 2024.04.16 |
[LeetCode] 129. Sum Root to Leaf Numbers (0) | 2024.04.15 |
[LeetCode] 404. Sum of Left Leaves (0) | 2024.04.14 |