首页 > 代码库 > UVa 112 - Tree Summing
UVa 112 - Tree Summing
题目:给你一个数和一棵树,问时钟是否存在根到叶子的路径使得路径上的数字和与已知数相等。
分析:递归、栈。因为除了最外边的树外,其他都有两颗子树,直接递归求解即可。
如果存在一棵子树成立,即返回成立。注意叶子节点的另可子树为空,叶子直接返回结果。
说明:注意数据中可能有负数。(POJ1145)
#include <iostream> #include <cstdlib> #include <cstdio> using namespace std; char input( void ) { char temp; scanf("%c",&temp); while ( temp == ' ' || temp == '\n' ) scanf("%c",&temp); return temp; } int deal( int v, int *leaf ) { int temp,value; scanf("%d",&value); temp = input(); int max = 0,l = 0,r = 0; if ( temp == '(' ) { if ( deal( v-value, &l ) ) max = 1; temp = input(); if ( deal( v-value, &r ) ) max = 1; temp = input(); if ( l && r ) max = (v==value); }else *leaf = 1; return max; } int main() { int n,temp; while ( ~scanf("%d",&n) ) { input(); if ( deal( n, &temp ) ) printf("yes\n"); else printf("no\n"); } return 0; }
测试数据:
-6 (3(-9()())()) 9 (5(4(3(2()())())())())
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。