SWEA 1233規則演算の検証



バイナリツリーに関する質問ですが、入力の規則性が見つかれば、バイナリツリーに対する理解がなくても簡単に解くことができます.
演算が可能な場合は、すべてのリーフノード(最下位ノード)が数値で構成され、残りのノードは演算子で構成されます.
入力中葉ノードは最後に入るので,該当する条件を確認するだけで所望の答えが得られる.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Solution {
	static BufferedReader br;
	static BufferedWriter bw;
	static StringTokenizer st;

	public static void main(String[] args) throws IOException {
		br = new BufferedReader(new InputStreamReader(System.in));
		bw = new BufferedWriter(new OutputStreamWriter(System.out));
		// 숫자 > (int) 48
		for (int tc = 1; tc <= 10; tc++) {
			int N = Integer.parseInt(br.readLine());
			int pass = 1;
			if (N % 2 == 0) {
				pass = 0;
				for (int i = 0; i < N; i++) {
					br.readLine();
				}
			} else {
				for (int i = 0; i < N / 2; i++) {
					st = new StringTokenizer(br.readLine(), " ");
					st.nextToken();
					if (st.nextToken().charAt(0) >= 48)
						pass = 0;
					if (st.nextToken().charAt(0) < 48)
						pass = 0;
					if (st.nextToken().charAt(0) < 48)
						pass = 0;
				}
				for (int i = N / 2; i < N; i++) {
					if (br.readLine().charAt(0) < 48)
						pass = 0;
				}
			}
			bw.append(String.format("#%d %d\n", tc, pass));
		}
		bw.flush();
		bw.close();
	}
}