def from_infix_to_prefix(expression):
st = list()
res = list()
priority = {"+": 0, "-": 0, "*": 1, "/": 1, "^": 2}
expression = deepcopy(expression)
expression.reverse()
for e in expression:
if e in [")", "]"]:
st.append(e)
elif e == "(":
c = st.pop()
while c != ")":
res.append(c)
c = st.pop()
elif e == "[":
c = st.pop()
while c != "]":
res.append(c)
c = st.pop()
elif e in priority:
while len(st) > 0 and st[-1] not in [")", "]"] and priority[e] < priority[st[-1]]:
res.append(st.pop())
st.append(e)
else:
res.append(e)
while len(st) > 0:
res.append(st.pop())
res.reverse()
return res
['(', 'N1', '-', '1', ')', '*', 'N0']
-> ['*', '-', 'N1', '1', 'N0']
先反转是为了得到先序遍历 根左右,不然就会成为根右左