UVa 112 - Tree Summing
2014-04-26 16:32
393 查看
传送门UVa 112 - Tree Summing
树.
题意很简单, 给出一个数字n, 让你判断一棵树从根到每个叶子经过的节点值的和是否有和n相同的.
和那个坑爹的Tree题目思路一样.
建树, DFS.
我的建树方法是找'(', 因为一个'('后面要么就是节点值, 要么就是')', 如果是节点值那就建立节点, 不然就是空节点.
然后我就碰到问题了...怎么读取下一个的number和判断EOF....
折腾了一会儿, 想到用scanf......反正现在看来是很简单的, 当时想了很久.
不过这题时第一题不看解题报告的树的题目....看来我有进步啊..(ˉ▽ ̄~)
为了庆祝我狂吃了一包魔法士.
详情见代码
树.
题意很简单, 给出一个数字n, 让你判断一棵树从根到每个叶子经过的节点值的和是否有和n相同的.
和那个坑爹的Tree题目思路一样.
建树, DFS.
我的建树方法是找'(', 因为一个'('后面要么就是节点值, 要么就是')', 如果是节点值那就建立节点, 不然就是空节点.
然后我就碰到问题了...怎么读取下一个的number和判断EOF....
折腾了一会儿, 想到用scanf......反正现在看来是很简单的, 当时想了很久.
不过这题时第一题不看解题报告的树的题目....看来我有进步啊..(ˉ▽ ̄~)
为了庆祝我狂吃了一包魔法士.
详情见代码
#include <cstdio> #include <cstring> #include <vector> #include <cctype> using namespace std; struct Node { Node *left, *right; int value; Node() { left = right = NULL; } }; Node *Creat(); void DFS(Node *root, int add); vector<int> sum; int nextNum; int main() { freopen("input.txt", "r", stdin); int number; int i, end = 0; bool flag; char ch; scanf("%d", &number); //只读取第一组输入. 以后的number都靠nextNum来赋值了. while (true) { sum.clear(); flag = false; Node *root = Creat(); while ((ch = getchar()) != '\n'); //到达当前输入的最后一位, 此时往下读取要么是数字, 要么是EOF if (scanf("%d", &nextNum) == EOF) end = 1; if (root == NULL) //如果是空的数, 从头开始, 如果是最后一组输入, 必须在此结束. 不然就死循环. { printf("no\n"); if (end == 1) break; else continue; } DFS(root, 0); for (i = 0; i < sum.size(); i++) { if (sum[i] == number) { flag = true; printf("yes\n"); break; } } if (flag == false) printf("no\n"); if (end == 1) break; number = nextNum; } return 0; } Node *Creat() { char ch; int temp; Node *root; while ((ch = getchar()) != '('); if (ch == '(') { if (scanf("%d", &temp) != 1) return NULL; else { root = new Node(); root->value = temp; root->left = Creat(); root->right = Creat(); } return root; } } void DFS(Node *root, int add) { if (!root->left && !root->right) { sum.push_back(add + root->value); return; } else { //printf("%d ", root->value); if (root->left) DFS(root->left, add + root->value); if (root->right) DFS(root->right, add + root->value); } }
相关文章推荐
- uva_112-Tree Summing
- UVA112 Tree Summing
- UVA - 112 Tree Summing
- UVa 112 Tree Summing (scanf()去空格&递归&二叉树遍历)
- UVA_112_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
- uva 112 - Tree Summing
- UVa 112 - Tree Summing
- Uva 112 - Tree Summing
- UVa Problem 112 - Tree Summing
- uva112 - Tree Summing
- UVa 112 - Tree Summing
- UVA 112 Tree Summing
- uva 112 tree summing
- uva 112 - Tree Summing