#二叉树 表达式求值问题
#输入二叉树后序表达式如 78+5/23*-,将他转化为二叉树并进行求值
class Node:
'节点类'
def __init__(self,value = -1):
self.value = value
self.lchild = None
self.rchild = None
class Tree:
'树类'
def __init__(self):
self.root = None
def add(self,expression):
nodes = []
for i in expression:
if 57 >= ord(i) >= 49:
node = Node(i)
nodes.append(node)
else:
node = Node(i)
node.rchild = nodes.pop()
node.lchild = nodes.pop()
nodes.append(node)
self.root = nodes.pop()
# 二叉树表达式求值
def evaluation(self, node=None):
# 递归解决
if node == None:
node = self.root
if 57 >= ord(node.value) >= 49:
return node.value
a = int(self.evaluation(node.lchild))
b = int(self.evaluation(node.rchild))
c = node.value
if c == '*':
return a * b
elif c == '/':
return a / b
elif c == '+':
return a + b
elif c == '-':
return a - b
#插入直接求值
def add_evaluation(self, expression):
nodes = []
for i in expression:
if 57 >= ord(i) >= 49:
node = Node(i)
nodes.append(node)
else:
node = Node(i)
a = int(nodes.pop().value)
b = int(nodes.pop().value)
if i == '*':
node.value = b * a
elif i == '/':
node.value = b / a
elif i == '+':
node.value = b + a
elif i == '-':
node.value = b - a
nodes.append(node)
return node.value
if __name__ == '__main__':
'主函数'
expression = '78+5/23*-'
my_tree = Tree()
#直接求值
print(my_tree.add_evaluation(expression))
# 先录入再求值
# my_tree.add(expression)
# print(my_tree.evaluation())
二叉树