一. 题目描述
https://vjudge.net/problem/UVA-699
二. 解题思路
- 二叉树,根据此题,可以用数组存放每一列的节点权值的和,根据索引判断节点的位置。
- 对于输入,题目中仍是递归的输入,所以我们递归的构造这棵树,并将每列的节点权值求和。
- 值得注意的是:每次输入需要将数组中的值恢复初始状态,即清零,以便存放下一颗树。
三. 解题代码
import java.io.PrintWriter;
import java.util.Scanner;
public class Main {
static int[] sum = new int[81];
static Scanner in = new Scanner(System.in);
static PrintWriter out = new PrintWriter(System.out);
public static void main(String[] args) {
int cas = 1;
while (input()) {
out.println("Case " + cas++ + ":");
int p = 0;
while (sum[p] == 0)
p++;
while (sum[p] != 0) {
out.print(sum[p++]);
if (sum[p] != 0) {
out.print(" ");
}
}
out.println("\n");
}
out.flush();
out.close();
in.close();
}
private static boolean input() {
for (int i = 0; i < sum.length; i++)
sum[i] = 0;
int v = in.nextInt();
// System.out.println("input " + v);
if (v == -1)
return false;
int p = sum.length / 2;
sum[p] = v;
buildTree(p - 1);
buildTree(p + 1);
return true;
}
private static void buildTree(int p) {
int v = in.nextInt();
//System.out.print("v = " + v);
if (v == -1)
return;
sum[p] += v;
//System.out.println(" sum[" + p + "] = " + sum[p]);
buildTree(p - 1);
buildTree(p + 1);
}
}