【黑皮树】表达式树

目录


前言

我们知道我们前缀中缀后缀表达式是可以利用栈来进行相互转换的,其实树也是可以的,这里就讲解树如何存储表达式


一  表达式树的介绍

这个是(a+b*c)+((d*e+f)*g) 

我们有这么一棵树,我们可以依次对它进行先序遍历,中序遍历和后序遍历
先序遍历
根节点--左子树--右子树
++a*bc*+*defg

后序遍历
左子树--右子树--根节点
abc*+de*f+g*+

中序遍历就是我们一般的那种表达式

我们可以可以很直观的看出,这样的遍历方法是是可以得到相对应得后最表达式和前缀表达式

二  如何构造表达式树

我们都知道广度优先搜索是要利用树和队列,这里就是利用树和栈得情景了
注意,栈里面都是存储的是相对应的节点的地址
我们先以一个后缀表达式为例子:
ab+cde+**

首先我们扫描带了两个数字,然后就开辟两个空间,上面得方块是栈
然后当我们扫描大符号+的时候,就直接把这两个元素进行弹出
然后栈里就有了一个加号,然后我们继续扫描
然后就是继续把数字进行放入到栈里面

然后我们又扫描到了+号,这个时候,我们就要弹出两个数字
 

然后我们继续扫描到了*号,继续弹出两个元素
 

然后当我们到了*号,我们就继续弹出两个元素
 

这个*就是根节点了
 


总结

我们学习了到了前序,中序,后序的操作
前序就是先处理根节点--左子树--右子树
中序就是先出里左子树--根节点--右子树
后续就是左子树--右子树--根节点


我们已经有了中缀表达式转为后缀表达树的方法,那么我们直接在后缀表达式树的基础上构建出一个树
我们遇到数字就直接进入,然后遇到符号就直接弹出两个,然后里面放入符号
这个里面式存储各个节点的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值