UVa 112 - Tree Summing
2013-05-25 22:51
507 查看
/* * UVa 112 - Tree Summing * */ import java.io.IOException; import java.io.InputStreamReader; import java.io.StreamTokenizer; import java.util.LinkedList; //方法一:用栈 class TreeSuming { public static void main(String[] args) throws IOException { int num = 0; int count = 0; int sum = 0; int c; int data; LinkedList<String> stack = new LinkedList<String>(); StreamTokenizer in = new StreamTokenizer(new InputStreamReader( System.in)); boolean flag = false; while ((c = in.nextToken()) != StreamTokenizer.TT_EOF) { if (stack.size() == 0) { num = ((int) in.nval);// 读取给定路径值 c = in.nextToken(); } if (c == StreamTokenizer.TT_NUMBER) {// 节点值 data = (int) in.nval; sum += data; stack.push(data + ""); count = 0; } if (c != StreamTokenizer.TT_NUMBER) {// 左右括号 if ((char) c == '(') { stack.push("("); } else if ((char) c == ')') { if (stack.getFirst() == "(") {// 出栈 count++; stack.pop(); if (count == 2) {// 叶节点 if (sum == num) { flag = true; } count = 0; } } else {// 返回父节点 sum -= Integer.parseInt(stack.pop()); stack.pop();// 左括号出栈 count = 0; } } } if (stack.size() == 0) { if (flag) { System.out.println("yes"); } else { System.out.println("no"); } sum = 0; flag = false; count = 0; } } } } // 方法二:递归 class Main { int num = 0; int sum = 0; int c; StreamTokenizer in = new StreamTokenizer(new InputStreamReader(System.in)); boolean found = false; public static void main(String[] args) throws Exception { Main m = new Main(); while ((m.c = m.in.nextToken()) != StreamTokenizer.TT_EOF) { m.sum = 0; m.found = false; m.num = (int) m.in.nval; m.get_tree(m); if (m.found) { System.out.println("yes"); } else { System.out.println("no"); } } } // 返回false:空树 private boolean get_tree(Main m) throws Exception { m.c = m.in.nextToken();// 读取"(" m.c = m.in.nextToken(); if (m.c != StreamTokenizer.TT_NUMBER) {// "("后面不是数字 空树 return false; } int num = (int) m.in.nval; if (m.c == StreamTokenizer.TT_NUMBER) { m.sum += num; } boolean left = get_tree(m);// 递归遍历左子树 boolean right = get_tree(m);// 递归遍历右子树 if (!left && !right && m.sum == m.num) {// 叶子节点,找到路径 m.found = true; } m.in.nextToken();// 读取")" m.sum -= num; return true; } }
相关文章推荐
- uva112 Tree Summing(二叉树 + 栈)
- UVa 112 - Tree Summing
- UVA 112 Tree Summing
- uva 112 tree summing
- uva 112 - Tree Summing
- UVa 112 - Tree Summing
- UVA 112 Tree Summing
- poj 1145 (uva 112) Tree Summing
- POJ 题目1145/UVA题目112 Tree Summing(二叉树遍历)
- UVA - 112 Tree Summing
- uva 112 Tree Summing
- UVa 112|POJ 1145|Tree Summing|字符串处理|树的遍历
- UVa 112 - Tree Summing
- UVA 112 Tree Summing
- UVA 112 - Tree Summing(栈)
- POJ 题目1145/UVA题目112 Tree Summing(二叉树遍历)
- UVA - 112 Tree Summing
- UVA 112-Tree Summing
- UVA 112(Tree Summing)回溯
- uva112-Tree Summing[动态建树]