import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.StringTokenizer;
class Solution {
static ArrayList<ArrayList<Integer>> tree;
static HashMap<Integer, String> alpha;
static int flag;
public static void inorder(int x) {
ArrayList<Integer> arr = tree.get(x);
try {
Integer.parseInt(alpha.get(x));
if (!arr.isEmpty()) {
flag = 0;
}
} catch (NumberFormatException e) {
if (arr.size() < 2) {
flag = 0;
}
else {
inorder(arr.get(0));
inorder(arr.get(1));
}
}
}
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int testCase = 1; testCase <= 10; testCase++) {
StringTokenizer st = new StringTokenizer(br.readLine(), "");
int N = Integer.parseInt(st.nextToken());
tree = new ArrayList<>();
tree.add(new ArrayList<>());
alpha = new HashMap<>();
flag = 1;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine(), " ");
tree.add(new ArrayList<>());
int x = Integer.parseInt(st.nextToken());
String a = st.nextToken();
alpha.put(x, a);
while(st.hasMoreTokens()) {
int y = Integer.parseInt(st.nextToken());
tree.get(x).add(y);
}
}
inorder(1);
System.out.printf("#%d %d\n", testCase, flag);
}
}
}
순회알고리즘은 이전 문제인 중위순회 알고리즘을 사용하였고 순회를 돌면서 노드값을 int로 변환하는 과정인 Integer.parseInt()
에서
NumberFormatException 이 발생하면 현재 노드값이 연산자이고 연산자일때 자식 노드숫자가 2개가 아니거나
NumberFormatException 이 발생하지 않은것은 현재 노드값이 숫자인데 자식노드가 존재하면 flag를 0으로 변경한다.
그 후 flag를 출력하면 유효한지 아닌지 체크가 가능하다.