Leetcode Java Binary Tree Paths
업데이트:
문제
코드
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> result = new ArrayList<>();
this.recursive(root, result, new StringBuilder(), 0);
return result;
}
public void recursive(TreeNode root, List<String> list, StringBuilder stringBuilder, int length) {
if (root == null) {
return;
}
stringBuilder.append(root.val);
if (root.left == null && root.right == null) {
list.add(stringBuilder.toString());
} else {
stringBuilder.append("->");
this.recursive(root.left, list, stringBuilder, stringBuilder.length());
this.recursive(root.right, list, stringBuilder, stringBuilder.length());
}
stringBuilder.setLength(length);
}
}
결과
설명
-
주어진 이진 트리인 root를 이용하여 root부터 leaf까지 이어진 모든 결과를 반환하는 문제이다.
-
root부터 leaf까지 이어진 모든 결과를 담을 result 컬렉션을 정의한다.
- StringBuilder를 활용한 재귀 호출을 이용하여 result에 모든 경우의 수를 넣어준다.
- root가 null인 경우 수행이 불가능하므로, 종료한다.
- root의 val 값을 stringBuilder에 넣어 값을 이어준다.
- root의 left와 right TreeNode가 null인 경우 더 이어줄 node가 없으므로, stringBuilder의 결과를 list에 넣어준다.
- 그 외의 경우 stringBuilder에 “->” 키워드를 넣어주고, root의 left와 right TreeNode를 순서대로 재귀 호출 수행한다.
- 단, stringBuilder의 길이를 각각 넣어준다.
- 수행이 완료되면 stringBuilder에 length 값을 주입하여 length 번째 이후에 등록된 값들을 제거해준다.
- 재귀 호출이 완료되면 root부터 leaf까지 이어진 모든 결과를 저장한 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기