말단부터 올라오면서 연산한다!
재귀함수로 1번노드부터 차례로 점점 내려간다
만약, x번 노드가 숫자일 경우, 그대로 return 하고
연산자일 경우 left, right 로 나눠 재귀로 들어간다.
이후, left, right를 연산자에 맞는 연산을 통해 return!
def calc(x):
if tree[x] in "+-*/":
left_val=calc(left[x])
right_val=calc(right[x])
if tree[x]=="+":
return int(left_val)+int(right_val)
elif tree[x]=="*":
return int(left_val)*int(right_val)
elif tree[x]=="-":
return int(left_val)-int(right_val)
else:
return int(left_val)//int(right_val)
else:
return tree[x]
res=[]
for m in range(10):
tmp=""
N=int(input())
tree,left,right=[0]*(N+1),[0]*(N+1),[0]*(N+1)
for _ in range(N):
S=list(map(str,input().split()))
tree[int(S[0])]=S[1] # tree[x]= x정점의 값
if len(S)>=4:
left[int(S[0])]=int(S[2]) # left[x]= x정점의 왼쪽의 정점번호
right[int(S[0])]=int(S[3]) # right[x] = x정점의 오른쪽의 정점번호
tmp=calc(1)
res.append(tmp)
for i in range(len(res)):
print("#%d %s"%(i+1,res[i]))