#P1145. Tree Summing

    ID: 146 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>树结构数据结构Duke Internet Programming Contest 1992UVA 112

Tree Summing

题目描述

LISP是最早的高级编程语言之一,并且和FORTRAN一样,是目前仍在使用的最古老的编程语言之一。列表是LISP中的基本数据结构,能够很容易地被用来表示其他重要的数据结构,比如树。

这个问题是关于判断以LISP S-表达式表示的二叉树是否具有某种属性。

给定一棵由整数组成的二叉树,你需要编写一个程序,判断是否存在一条从根节点到叶节点的路径,使得该路径上节点的值之和等于一个指定的整数。例如,在下面所示的树中,恰好有四条从根节点到叶节点的路径。这些路径的节点值之和分别是27222627、22、261818

</p>

二叉树在输入文件中以LISP S-表达式的形式表示,具有以下格式:

空树 ::= ()

树 ::= 空树 (整数 树 树)

上面的树状图由表达式$(5 (4 (11 (7 () ()) (2 () ()) ) ()) (8 (13 () ()) (4 () (1 () ()) ) ) )$表示。

注意,按照这种表示方式,树的所有叶子节点的形式都是(整数 ()()() ())。

由于空树没有从根节点到叶节点的路径,所以对于空树中是否存在节点值之和为指定整数的路径的任何查询,答案都必须是否定的。

输入格式

输入由一系列测试用例组成,形式为整数/树对。每个测试用例由一个整数、一个或多个空格,以及一个按照上述S-表达式格式表示的二叉树组成。所有的二叉树S-表达式都是有效的,但表达式可能会跨多行,并且可能包含空格。输入文件中会有一个或多个测试用例,输入以文件结束符终止。

输出格式

对于输入文件中的每个测试用例(整数/树对),应该有一行输出。对于每一对I, T(I代表整数,T代表树),如果在树T中存在一条从根节点到叶节点的路径,其节点值之和为I,则输出字符串“yes”;如果在树T中不存在这样的路径,则输出“no”。

22 (5(4(11(7()())(2()()))()) (8(13()())(4()(1()()))))
20 (5(4(11(7()())(2()()))()) (8(13()())(4()(1()()))))
10 (3 
     (2 (4 () () )
        (8 () () ) )
     (1 (6 () () )
        (4 () () ) ) )
5 ()
yes
no
yes
no

来源

1992年杜克大学互联网编程竞赛,UVA 112