python中treenode_Python与数据结构[3] -> 树/Tree[1] -> 表达式树和查找树的 Python 实现...

本文介绍了如何在Python中实现表达式树和查找树。首先通过代码展示了如何根据后缀表达式构建二叉表达式树,然后详细解释了代码实现过程。接着,文章讨论了二叉查找树,包括其查找、插入和删除操作的实现,并提供了测试用例展示其功能。
摘要由CSDN通过智能技术生成

表达式树和查找树的 Python 实现

目录

1二叉表达式树

表达式树是二叉树的一种应用,其树叶是常数或变量,而节点为操作符,构建表达式树的过程与后缀表达式的计算类似,只不过在遇到运算符时不是进行计算,而是将树节点赋值为运算符,并将节点的左右叶子指向两个变量构成一个基本的二叉树后再压入栈中。

Expression Tree:*

|___________

| |

+ *

|_____ |_____

| | | |a b c+

|__| |d c

下面利用代码实现一棵二叉表达式树

完整代码

1 from binary_tree importBinaryTree, TreeNode2 from stack.linked_list_stack importStack3

4

5 classExpressionTree(BinaryTree):6 SIGN = {'+': 1, '-': 1, '*': 2, '/': 2, '(': 3}7

8 defgene_tree_by_postfix(self, expr):9 s =Stack()10 for i inexpr:11 if i inself.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 deftest_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 c46 '''

47 test_expression_tree(ep.split(' '))

View Code

分段解释

首先导入二叉树类、树节点类和栈类

1 from binary_tree importBinaryTree, TreeNode2 from stack.linked_list_stack import Stack

接着构建一个表达式树类,基于二叉树进行派生,依照构建表达式树的思路定义一个生成树的方法

1 classExpressionTree(BinaryTree):2 SIGN = {'+': 1, '-': 1, '*': 2, '/': 2, '(': 3}3

4 defgene_tree_by_postfix(self, expr):5 s =Stack()6 for i inexpr:7 if i inself.SIGN.keys():8 right =s.pop()9 left =s.pop()10 node =TreeNode(i, left, right)11 s.push(node)12 else:13 s.push(TreeNode(i))14 self._root = s.pop()

再定义一个测试函数,以三种遍历方式遍历显示表达式树

1 deftest_expression_tree(ep):2 t =ExpressionTree()3 t.gene_tree_by_postfix(ep)4 print('\n------Pre-traversal-------')5 print(t)6

7 print('\n------Post-traversal------')8 t.show(t.post_traversal())9 print('\n-------In-tra

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值