波兰式转为逆波兰式——2016年华为笔试最后一题

本文介绍了2016年华为笔试中关于将波兰表示法转换为逆波兰表示法的问题。解题思路涉及构建二叉树,并通过前序和后序遍历来完成转换。代码实现部分给出了如何根据波兰式生成逆波兰式的示例,并进一步探讨了已知逆波兰式转换为波兰式的解题方法。
摘要由CSDN通过智能技术生成

题目

2016年9月6日华为笔试最后一道题(300分)为波兰式转化为逆波兰式的问题,具体题目为:

描述:
  波兰表示法,是一种逻辑、算术和代数表示方法,其特点是操作符置于操作数的前面,因此也称为前缀表示法。例如:“a+b”的波兰表示法为:“+ab”。
  逆波兰表示法是一种数学表达式方式,在逆波兰记法中,所有操作符置于操作数的后面,因此也称为后缀表示法。例如:“a+b”的逆波兰表示法为:“ab+”。
  题目要求将输入的波兰表示法表达式转换为逆波兰表示法表达式。
说明:
  给定输入和结果输出运算符和变量之间均用逗号隔开。题目给定的运算符仅有“+”、“-”、“*”、“/”四种。
示例输入(波兰式):“-,+,a,*,+,b,c,d,e”
对应的中缀表达式:“a+(b+c)*d-e”
结果输出(逆波兰式):“a,b,c,+,d,*,+,e,-,”

二叉树

解题思路

  由上图二叉树我们可知,前缀表达式实际上是二叉树的前序遍历,后缀表达式实际上是二叉树的后续遍历。以上二叉树有一个特点,即叶子节点为字母(非操作符)。由此特点,若知道前序、中序、后序遍历中的任何一种,都可一还原上图二叉树。
由此,解题思路为:
1. 根据前缀表达式,构建二叉树;
2. 后序遍历该二叉树,即得到后缀表达式(逆波兰式)。

由于前序遍历是先根,后左右结点。在构建二叉树时,有如下规则:
1. 先确定根节点root。从左向右遍历前缀序列,根节点即为前缀序列的第一个字符,其值为“-”;
2. 第二个字符即为其左结点,其值为“+”;
3. 若第三个字符为操作符,则右结点为最后一个字符。否则为第三个字符;此例中为最后一个字符“e”;
4. 然后以左右结点中为操作符的结点作为根节点,重复1-3,即可还原二叉树。

代码实现

实现代码如下:

import java.util.Scanner;

/**
 * Tile:
 * Author: zsd
 * Date: 16-9-6
 * Email:726679904@qq.com
 */
class TreeNode {
    public TreeNode left;
 
  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值