Algorithm
129. Sum Root to Leaf Numbers
happyMoons
2023. 12. 29. 21:16
문제
Linked List 로 구현된 이진 트리가 주어졌을때, 루트 노드 부터 리프 노드까지 순회하면서 전체 노드의
총 합을 구하는 문제입니다.
그런데 아래 그림에 나온 설명처럼,
루트노드 부터 리프노드 까지의 숫자를 단순히 sum 하는것이 아닌 string 형태로 합친 후 sum 을 해야합니다.
문제 풀이
미디엄 문제 치고는 간단한 문제입니다.
전체 노드를 전위순회(pre order) 하기만 하면서 sum 을 해주면 풀립니다.
문제 풀이 코드
static int sum = 0;
public static int sumNumbers(TreeNode root) {
preorder(root, "");
return sum;
}
private static void preorder(TreeNode root, String num) {
if(root == null) return;
if(root.left == null && root.right == null) {
sum += Integer.parseInt(num + root.val);
return;
}
preorder(root.left, num + root.val);
preorder(root.right, num + root.val);
}
1. 베이스 조건은 root 노드가 null 인 경우 입니다.
2. 루트노드의 왼쪽, 오른쪽 자식 노드가 모두 null 이면 리프노드이기 때문에 sum 을 해줍니다.
3. 왼쪽, 오른쪽 자식 노드 중 null 이 아닌 노드가 있다면 노드의 값을 + 해주면서 전위순회를 계속 해줍니다.
위 문제 풀이 코드는 String 으로 받아서 처리하도록 했습니다.
위와 같이 하지 않고 각 num 에 *10 을 붙여서 처리해도 됩니다.
예를들어, num 을 int 형으로 변환해주고 + 하는 시점에 아래와 같이 처리하면 됩니다.
num + root.val; 코드를 다음과 같이 변환해주면 굳이 String 으로 받지 않아도 됩니다.
sum += num * 10 + root.val;