def calculate(postorder_num):
    """
  1. postorder로 들어온 숫자로 계산한다.
  2. 두개의 스택을 선언
  3. 하나는 숫자 하나는 연산자
  4. 각 연산자에 맞는 계산을 실행해야 함
  5. 숫자가 2개, 연산자 1개 이면 연산을 실행한다
  :param postorder_num:
  :return:
  """
    num = makeStack()
    opp = makeStack()
    for n in postorder_num:
        if n.isdigit():  # 0~9 10진수
            num.push(int(n))
        else:
            opp.push(n)  # 무조건 1이다 그러니깐 필요 없다
            print(len(opp))

        if len(num) >= 2 and len(opp) >= 1:
            b = num.pop()
            a = num.pop()
            op = opp.pop()
            if op == "+":
                num.push(a + b)
            elif op == "-":
                num.push(a - b)
            elif op == "*":
                num.push(a * b)
            elif op == "/":
                num.push(a / b)
            # print(a, b, op)
    return int(num.pop())
def calculate(postorder_num):
  """
  1. postorder로 들어온 숫자로 계산한다.
  2. 두개의 스택을 선언
  3. 하나는 숫자 하나는 연산자
  4. 각 연산자에 맞는 계산을 실행해야 함
  5. 숫자가 2개, 연산자 1개 이면 연산을 실행한다
  :param postorder_num:
  :return:
  """
  num = makeStack()
  opp = makeStack()
  for n in postorder_num:
    if n.isdigit():#0~9 10진수
      num.push(int(n))
    else:
      opp.push(n) # 무조건 1이다 그러니깐 필요 없다
      print(len(opp))

    if len(num) >= 2 and len(opp) >= 1:
      b = num.pop()
      a = num.pop()
      op = opp.pop()
      if op == "+":
        num.push(a+b)
      elif op == "-":
        num.push(a-b)
      elif op == "*":
        num.push(a*b)
      elif op == "/":
        num.push(a/b)
      # print(a, b, op)
  return int(num.pop())
    a = tree._add_root(2)
    b = tree._add_left(a, 7)
    c = tree._add_right(a, 5)
    d = tree._add_left(b, 2)
    e = tree._add_right(b, 6)
    f = tree._add_left(e, 5)
    g = tree._add_right(e, 11)
    h = tree._add_right(c, 9)
    i = tree._add_left(h, 4)

    print("Start ->", end="")
    for a in tree.inorder():
        print(str(a._node._element) + " -> ", end="")
    print("Finish")

de = makeStack()
# 연산자가 두개인경우에는 반드시 괄호로 묵는다
def inorder_to_postorder(exp):
    # inorder -> post로 바꾼다

    operator = "+-*/()"  # 연산자들을 선언
    result = list()  # 후위 표기법으로 결과가 저장되는 리스트
    stack = list()  # list를 스택으로 사용함.

    for symbol in exp:
        if symbol not in operator:  # 숫자일 경우 바로 결과리스트에 넣는다.
            result.append(symbol)
        else:
            if symbol in "+-*/":  # 더하기, 빼기, 곱하기, 나누기 연산자일 경우
                stack.append(symbol)  # 후위 표기법으로 변환하기 위하여 우선 별도 스택에 임시로 저장.
            elif symbol == ")":  # 닫는 괄호 ) 일 경우 저장해 연산자 하나를 결과리스트에 추가한다.
    a = tree._add_root(2)
    b = tree._add_left(a, 7)
    c = tree._add_right(a, 5)
    d = tree._add_left(b, 2)
    e = tree._add_right(b, 6)
    f = tree._add_left(e, 5)
    g = tree._add_right(e, 11)
    h = tree._add_right(c, 9)
    i = tree._add_left(h, 4)

    print("Start ->", end="")
    for a in tree.inorder():
        print(str(a._node._element) + " -> ", end="")
    print("Finish")

de = makeStack()
# 연산자가 두개인경우에는 반드시 괄호로 묵는다
def inorder_to_postorder(exp):
  #inorder -> post로 바꾼다

    operator = "+-*/()"                     # 연산자들을 선언
    result = list()                     # 후위 표기법으로 결과가 저장되는 리스트
    stack = list()                      # list를 스택으로 사용함.

    for symbol in exp:
        if symbol not in operator:          # 숫자일 경우 바로 결과리스트에 넣는다.
            result.append(symbol)
        else:
            if symbol in "+-*/":        # 더하기, 빼기, 곱하기, 나누기 연산자일 경우
                stack.append(symbol)    # 후위 표기법으로 변환하기 위하여 우선 별도 스택에 임시로 저장.
            elif symbol == ")":         # 닫는 괄호 ) 일 경우 저장해 연산자 하나를 결과리스트에 추가한다.