前/中/后缀表达式的转换

前/中/后缀表达式的转换

 
 
    自然表达式转换为前/中/后缀表达式,其实是很简单的。首先将自然表达式按照优先级顺序,构造出与表达式相对应的二叉树,然后对二叉树进行前/中/后缀遍历,即得到前/中/后缀表达式。
 
    举例说明将自然表达式转换成二叉树:
 
    a×(b+c)-d
 
    ① 根据表达式的优先级顺序,首先计算(b+c),形成二叉树
   
    ②然后是a×(b+c),在写时注意左右的位置关系
 
    ③最后在右边加上 -d
    tree3.JPG
 
    然后最这个构造好的二叉树进行遍历,三种遍历的顺序分别是这样的:
 
    ① 前序遍历:根-左-右
    中序遍历:左-根-右
    后序遍历:左-右-根
 
    所以还是以刚才的这个例子,在最终二叉树的基础上可以得出:
 
    前缀表达式:-*a+bcd
    中缀表达式:a*b+c-d
    后缀表达式:abc+*d-
 
 
 
    一些其他的遍历原则:
 
    1、深度优先遍历:
 
    首先访问出发点V,并将其标记为已访问过;然后依次从V出发搜索V的每个邻接点W。若W未曾访问过,则以W为新的出发点继续进行深度优先遍历,直至图中所有和源点V有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均被访问为止。
 
    2、广度优先遍历:
 
    首先访问出发顶点V,然后访问与顶点V邻接的全部未被访问过的顶点W0,W1,...WK-1;接着再依次访问与顶点W0,W1,...WK-1邻接的全部未被访问过的顶点,以此类推,直至图的所有顶点都被访问到,或出发顶点V所在的连通分量的全部顶点都被访问到为止。
 
    注:对于树来说,深度优先就是从左到右,从上到下;广度优先就是从上到下,从左到右。
 

 照片问题,请见相册



-The End-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是将缀表达式转换前缀表达式的代码: ```python def infix_to_prefix(expression): # 定义运算符的优先级 precedence = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3} stack = [] prefix = [] for char in reversed(expression): if char.isalnum(): prefix.append(char) elif char == ')': stack.append(char) elif char == '(': while stack and stack[-1 != ')': prefix.append(stack.pop()) stack.pop() else: while stack and precedence[char < precedence.get(stack[-1], 0): prefix.append(stack.pop()) stack.append(char) while stack: prefix.append(stack.pop()) return ''.join(reversed(prefix)) expression = "(A*(B-C/D))*E" prefix_expression = infix_to_prefix(expression) print("前缀表达式:", prefix_expression) ``` 下面是将缀表达式转换后缀表达式的代码: ```python def infix_to_postfix(expression): # 定义运算符的优先级 precedence = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3} stack = [] postfix = [] for char in expression: if char.isalnum(): postfix.append(char) elif char == '(': stack.append(char) elif char == ')': while stack and stack[-1 != '(': postfix.append(stack.pop()) stack.pop() else: while stack and precedence[char <= precedence.get(stack[-1], 0): postfix.append(stack.pop()) stack.append(char) while stack: postfix.append(stack.pop()) return ''.join(postfix) expression = "(A*(B-C/D))*E" postfix_expression = infix_to_postfix(expression) print("后缀表达式:", postfix_expression) ``` 希望以上代码能够帮到你!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [缀表达式,前缀表达式后缀表达式之间的相互转换和代码表示](https://blog.csdn.net/FYSGXFZ/article/details/100620836)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [缀、缀和后缀表达式详解,缀表达式到后缀表达式转换规则,以及后缀表达式的计算规则,附计算代码](https://blog.csdn.net/yldmkx/article/details/109537911)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值