什么是前缀式,中缀式,后缀式
Posted on Wed, 25 Dec 2024 10:35:10 +0800 by LiangMingJian
什么是前缀式,中缀式,后缀式
概述
前后缀式都是使用栈进行储存,遵循后进先出的原则。例如使用栈计算后缀式 xyc + 8 * - 。
- 栈依序存入 x,y,c
- 遵循后进先出,取出 c,y,进行加法运算得 y + c,存入栈中,此时栈底为 x,栈顶为 y + c
- 存入 8
- 取出 8,y + c,进行乘法运算得 ( y + c ) * 8,入栈
- 取出 ( y + c ) * 8,x,进行减法运算得 x - ( y + c ) * 8,注意后取出的 x 为被减数
前缀式
前缀式又称波兰式,是一种没有括号的算术表达式。其特点是将运算符写在前面,操作数写在后面。例如算式:1 - ( 2 + 3 ) ,等价于 - 1 + 2 3
中缀式
中缀式就是平时人们常用的算术表示方法,操作符处于操作数的中间。例如算式:3 + 4
后缀式
后缀式又称逆波兰式。与前缀式不同的是,后缀式把运算符写在运算对象的后面。例如算式:a + b,等价于 a b + 。这种写法的优点是,可以根据运算对象和算符的出现次序进行计算,而不需要使用括号,便于机器求值
中缀式转化前、后缀式
中缀式可以通过构造二叉树,通过后序遍历二叉树的方法求得后缀式,通过先序遍历二叉树的方法求得前缀式。例如算式: ( 1 + 2 ) * 3 + 2 * 1
- 后序遍历的实现思想是:从根节点出发,依次遍历各节点的左右子树,直到当前节点左右子树遍历完成后,才访问该节点元素
- 先序遍历的实现思想是:从根节点出发,先访问根节点,再访问当前节点的左子树,若当前节点无左子树,访问当前节点的右子树,直至所有元素被访问
- 中序遍历的实现思想是:从当前节点出发,先当前节点的左子树,再访问根节点最后再访问右子树
- 后序遍历:1 2 + 3 * 2 1 * +
- 先序遍历: + * + 1 2 3 * 2 1
- 中序遍历:( 1 + 2 ) * 3 + 2 * 1