表达式树和查找树的 Python 实现
目录
表达式树是二叉树的一种应用,其树叶是常数或变量,而节点为操作符,构建表达式树的过程与后缀表达式的计算类似,只不过在遇到运算符时不是进行计算,而是将树节点赋值为运算符,并将节点的左右叶子指向两个变量构成一个基本的二叉树后再压入栈中。
Expression Tree: * |___________ | | + * |_____ |_____ | | | | a b c + |__ | | d c
下面利用代码实现一棵二叉表达式树
完整代码
1 from binary_tree import BinaryTree, TreeNode 2 from stack.linked_list_stack import Stack 3 4 5 class ExpressionTree(BinaryTree): 6 SIGN = {'+': 1, '-': 1, '*': 2, '/': 2, '(': 3} 7 8 def gene_tree_by_postfix(self, expr): 9 s = Stack() 10 for i in expr: 11 if i in self.SIGN.keys(): 12 right = s.pop() 13 left = s.pop() 14 node = TreeNode(i, left, right) 15 s.push(node) 16 else: 17 s.push(TreeNode(i)) 18 self._root = s.pop() 19 20 21 def test_expression_tree(ep): 22 t = ExpressionTree() 23 t.gene_tree_by_postfix(ep) 24 print('\n------Pre-traversal-------') 25 print(t) 26 27 print('\n------Post-traversal------') 28 t.show(t.post_traversal()) 29 print('\n-------In-traversal-------') 30 t.show(t.in_traversal()) 31 32 33 if __name__ == '__main__': 34 ep = 'a b + c d e + * *' 35 ''' 36 * 37 |___________ 38 | | 39 + * 40 |_____ |_____ 41 | | | | 42 a b c + 43 |__ 44 | | 45 d c 46 ''' 47 test_expression_tree(ep.split(' '))