9251 - 最短路径(path)

通过次数

3

提交次数

8

时间限制 : 1 秒
内存限制 : 512 MB

在二叉树的表示中,有时需要用到虚节点。虚结点给二叉树中每个结点都补全其孩子结点,虚结点的值为规定的一个特定值,比如“#”、“0”、“∧”,扩展后的二叉树又称为扩展二叉树,这样能确定一棵唯一的二叉树。如果节点值均大于0,虚节点用0表示。这时,给定深度优先遍历的序列值,就可以重建对应的二叉树,例如5 4 11 7 0 0 2 0 0 0 8 13 0 0 4 0 1 0 0和1 2 0 0 3 0 0可以分别得到下图的两棵二叉树。

下面只考虑二叉树节点值大于0的情况。
对于一棵二叉树和一个目标值m,判断该树中是否存在一条从根节点到叶子节点的路径,该路径上所有节点值相加等于m。如果存在,输出True;否则输出False。
现给定n棵二叉树和n个目标值,判断路径是否存在。

输入

从文件path.in中读入数据。
第一行输入一个正整数n,表示有n组数据。
第二行为第一组节点数值,数值之间用空格隔开。0表示虚节点。
第三行为一个正整数,表示第一组的目标值。
第四行为第二组的节点数据。
第五行为第二组的目标值。
……

输出

输出到文件path.out中。
若存在根节点到叶子节点的路径上所有节点值相加等于目标值m,则输出True,否则输出False。

样例

输入

2
5 4 11 7 0 0 2 0 0 0 8 13 0 0 4 0 1 0 0
22
1 2 0 0 3 0 0
6

输出

True
False

提示

【样例1解释】
第一组的节点数据为5 4 11 7 0 0 2 0 0 0 8 13 0 0 4 0 1 0 0,目标值为22,在第一组数据中存在根节点到叶子节点的路径上所有节点值相加等于目标值m=22(图中蓝底结点路径),第一组数据输出为True。
第二组的节点数据为1 2 0 0 3 0 0,目标值为6,在第二组数据中不存在根节点到叶子节点的路径上所有节点值相加等于目标值m=6,第二组数据输出False。
【数据范围】
对于20%的数据n≤10,二叉树节点数(含虚节点)≤100;
对于100%的数据n≤30,二叉树节点数(含虚节点)≤100。

来源

云南编程挑战赛