四则运算表达式与二叉树

四则运算表达式与二叉树

四则运算表达式

  1. 前缀表达式:运算符位于操作数之前,如 +ab
  2. 中缀表达式:平时使用的标准四则运算表达式,如 a+b
  3. 后缀表达式:运算符位于操作数之后,如 ab+

二叉树三种遍历方式

先序遍历

  1. 访问根节点
  2. 先序遍历左子树
  3. 先序遍历右子树

中序遍历

  1. 中序遍历左子树
  2. 访问根节点
  3. 中序遍历右子树

后续遍历

  1. 后序遍历左子树
  2. 后续遍历右子树
  3. 访问根节点

传统方式进行四则运算式的变换

中缀表达式转换为后缀表达式

  1. 从左往右遍历中缀表达式中的每一个数字和符号
  2. 如果是数字就输出,即成为后缀表达式的一部分
  3. 如果是操作符,则判断其与栈顶元素的优先级,当该操作符是右括号或优先级低于栈顶符号,则栈顶元素依次出栈并输出,并将当前符号进栈,直到最终。

例如:此时给出一个中缀表达式:a*(b+c)-d
请添加图片描述
中缀表达式转换为前缀表达式

  1. 从右往左遍历中缀表达式中的每一个数字和符号
  2. 如果是操作数就进行输出
  3. 如果是操作符,判断其与栈顶元素的优先级,栈为空时直接入栈。优先级更高或相等时直接入栈,否则输出。
  4. 当遇到括号时,右括号直接入栈,左括号时依次弹出直到遇到左括号为止。到此括号丢弃

注意:与输出后缀表达式不一样,这里的输出类似一个栈,输出的值从后往前写。这里就不做了。

括号法进行四则运算的变换

同样使用中缀表达式 a*(b+c)-d

  • 转为前缀表达式

    1. 为表达式所有运算单位添加括号,以便运算顺序清晰可见。如此处添加括号后得到的值为 ((a*(b+c))-d)
    2. 将运算符号移动到对应括号的前面:- * a + b c d
  • 转为后缀表达式

    1. 为表达式所有运算单位添加括号,以便运算顺序清晰可见。如此处添加括号后得到的值为 ((a*(b+c))-d)
    2. 将运算符移动号对应括号的后面:a b c + * d -

二叉树法进行四则运算的变化

原理:四则运算式的中缀表达式是该式对应的二叉树的中序遍历所得的值。由中缀表达式得到的二叉树,他的先序遍历所得到的序列就是前缀表达式,他的后续遍历所得到的的值就是后缀表达式。

同样使用中缀表达式 a*(b+c)-d

难点:将中缀表达式变换为二叉树。

解答:如括号法请添加图片描述
一样,先为表达式所有的运算单位都添加上括号,然后逐层拆分括号,将运算符作为根节点,运算符左边的值划分给左子树,右边的值划分给右子树,左右子树再按照这个方法进行分解,得到最终值。

如上,得到的二叉树,然后自行运算即可,运算结果在括号法中给出了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值