为您提供了具有多对输入线的输入文件。每对的第一行是作为前一数组给出的树。第二行是相应节点上的值。叶节点(没有子节点的节点)上的值是整数。在非叶节点上,两个可能的值为+或*。树表示一种算术表达式,其中非叶节点u的值在+的情况下是u的子项的值的总和,在*情况下是u的子项的值的乘积。您需要计算每个节点的值,并在根目录输出计算的值。该树不限于二进制。 输入格式:输入由m对逗号分隔值的行组成,因此总共2m行。第一行是每一对都是用逗号分隔的整数列表,这些整数表示前一数组格式的树,其中-1表示null。每对中的第二行是逗号分隔的整数列表,以及符号+和∗。列表中的第i个项目是树中第i个节点的值或运算符。例如:
-1,0,0,0,1,1
+,*,2,3,0,7
2,0,-1,0
+,3,*,3
输出格式:对于每对输入行,输出一条包含在树的根部计算出的值的行。 对于上面的示例输入,输出为:
5
6
这是我到目前为止所掌握的。
import sys
def arithmetic_tree(lines):
parent = lines[0].split(",")
values = lines[1].split(",")
tree = []
root = [None]
for i in range(len(parent)):
if int(parent[i]) == -1:
root = i
tree.append([values[root]])
if int(parent[i]) == root:
tree[root].append(values[i])
sys.stdout.write(str(tree))
return 0
while True:
try:
lines = []
for x in range(2):
userinput = sys.stdin.readline().strip()
lines.append(userinput)
arithmetic_tree(lines)
except EOFError:
break
输入:
-1,0,0,0,1,1
+,*,2,3,0,7
输出:
[['+', '*', '2', '3']]