Leetcode Java Smallest String Starting From Leaf
업데이트:
문제
코드
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
private String str;
public String smallestFromLeaf(TreeNode root) {
this.str = null;
this.dfs(root, new StringBuilder());
return this.str;
}
public void dfs(TreeNode root, StringBuilder sb) {
if (root != null) {
char c = (char) (root.val + 97);
sb.append(c);
if (root.left == null && root.right == null) {
String s = sb.reverse().toString();
if (this.str == null || this.str.compareTo(s) > 0) {
this.str = s;
}
sb.reverse();
}
this.dfs(root.left, sb);
this.dfs(root.right, sb);
sb.deleteCharAt(sb.length() - 1);
}
}
}
결과
설명
-
영문자 순서 val에 저장된 이진 트리인 root를 이용하여 가장 마지막인 리프 노드부터 루트 노드까지 사전적인 순서가 가장 작은 단어를 구하는 문제이다.
-
전역변수인 str은 결과를 저장할 변수이다.
-
str을 null로 초기화하고 4번에서 정의한 dfs(TreeNode root, StringBuilder sb) 메서드에 새 StringBuilder를 초기화하여 넣고 수행한다.
- DFS 방식으로 단어를 완성할 dfs(TreeNode root, StringBuilder sb) 메서드를 정의한다.
- root가 null인 경우, 수행하지 않는다.
- c에 root의 val 값에 영소문자 ‘a’의 값인 97을 더해 문자로 변환하여 넣어준다.
- sb에 c를 넣고, root의 left와 right가 null인 리프 노드인 경우, 아래를 수행한다.
- s에 sb의 순서를 역순으로 반전시켜 문자열로 변환한 값을 넣어준다.
- 전역 변수인 str이 null이거나 str이 s보다 길이가 더 긴 경우, str에 s를 넣어준다.
- sb를 다시 반전시켜 원래 순서로 전환시켜준다.
- root의 left TreeNode로 재귀 호출을 수행한 후 right TreeNode로 다시 재귀 호출을 수행한다.
- 위의 수행이 완료되면 sb에서 마지막 문자를 제거하여 수행 전 문자열로 전환한다.
- 반복이 완료되면 결과가 저장된 str을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기