如何从先前的数组创建树(不是二进制树)?

时间:2019-05-28 13:23:44

标签: python

为您提供了具有多对输入线的输入文件。每对的第一行是作为前一数组给出的树。第二行是相应节点上的值。叶节点(没有子节点的节点)上的值是整数。在非叶节点上,两个可能的值为+或*。树表示一种算术表达式,其中非叶节点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']]

0 个答案:

没有答案