フルツリーを和ツリーpythonに変換

912 ワード

二叉木をいっぱい出して、アルゴリズムを書いてそれを求和木に変換します
和を求めるツリーとは:ツリーの和を求めるツリーは、同じ構造のツリーで、ツリーの各ノードには元のツリーの左サブツリーと右サブツリーの和が含まれます.
ツリー:10/-26//8-47 5
合計ツリー:20(4-2+12+6)/4(8-4)12(7+5)///0 0 0
ツリーは前シーケンスと中シーケンスの入力を与え、ツリーの要求中シーケンスの出力を求める.すべての処理データはintより大きくありません.
入力記述:2行目の整数、1行目のツリーの前順の遍歴、2行目のツリーの中順の遍歴、スペース分割出力記述:1行の整数、和を求めるツリーの中順の遍歴、スペース分割例1入力10-28-4 6 7 8-2-4 10 7 6 5出力0 4 0 0 20 0 12 0
各ルートノードの値はその左右のサブツリーのすべての値の和であり、ツリーは配列の形式で与えられ、ルートノードのみが要求され、そのルートノードの値は配列のすべての値からこの値を減算し、左右のサブツリーに再帰すればよい.
import sys
def func(a,b):
	if len(a)==1:
		return [0]
	elif len(a)==0:
		return []
	mid = b.index(a[0])
	b[mid] = sum(b[:])-b[mid]
	return func(a[1:mid+1],b[:mid]) +\
				[b[mid]] +\
				func(a[mid+1:],b[mid+1:])

if __name__=="__main__":
	a = list(map(int,input().strip().split()))
	b = list(map(int,input().strip().split()))
	ans = func(a,b)
	print(' '.join(map(str,ans)))