问题描述:

  前缀表达式转成后缀表达式,示例:

  * + 4 2 + 3 6 => 4 2 + 3 6 + *

思路(树):

  1. 从左往右扫描串

  2. 遇到操作符则递归构造树节点,当前操作符是根节点,并递归构造左右子节点

  3. 后序遍历当前结果,并返回

代码:

 1 #include <string>
 2 #include <sstream>
 3 #include <iostream>
 4
 5 using namespace std;
 6
 7 string input_str = "* + 4.3 2 + 3.5 6.2";
 8 int ind = 0;
 9
10 //树结构
11 typedef struct BinaryTreeNode
12 {
13     string cur_str;
14     BinaryTreeNode *left;
15     BinaryTreeNode *right;
16     BinaryTreeNode(string _cur_str)
17     {
18         cur_str = _cur_str;
19         left = NULL;
20         right = NULL;
21     }
22 } BNode_t;
23
24 //后序遍历树
25 void post_traverse(BNode_t *root, string &post_str)
26 {
27     if( root == NULL )
28         return;
29     post_traverse(root->left, post_str);
30     post_traverse(root->right, post_str);
31     if( post_str != "" )
32         post_str += " " + root->cur_str;
33     else
34         post_str = root->cur_str;
35 }
36
37 //得到下一个
38 string get_next()
39 {
40     string next = "";
41     for(; ind < input_str.size(); ind++)
42     {
43         if( input_str[ind] != ' ' )
44             next += input_str[ind];
45         else
46             break;
47     }
48     ind++;
49     return next;
50 }
51
52 //转换:递归构造树,并后序遍历
53 string transform()
54 {
55     string post_str;
56     string next = get_next();
57     if( ! isdigit(next[0]) )
58     {
59         BNode_t *root = new BNode_t(next);
60         root->left = new BNode_t( transform() );
61         root->right = new BNode_t( transform() );
62         post_traverse(root, post_str);
63         delete root->left;
64         delete root->right;
65         delete root;
66         return post_str;
67     }
68     else return next;
69 }
70
71
72 int main()
73 {
74     cout << transform() << endl;
75     return 0;
76 }

转载请注明引用自:

  http://www.cnblogs.com/breakthings/p/4053444.html

转载于:https://www.cnblogs.com/breakthings/p/4053444.html

前缀转后缀(表达式)相关推荐

  1. 中缀表达式转换为前缀及后缀表达式并求值【摘】

    它们都是对表达式的记法,因此也被称为前缀记法.中缀记法和后缀记法.它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前:中缀和后缀同理. 举例: (3 + 4) ...

  2. 中缀表达式转换为前缀或后缀表达式的手工做法

    以 a/b + ( c*d - e*f) / g 为例: 步骤1:按照运算符的优先级对所有的运算单元加括号. ((a/b) + (( (c*d) - (e*f)) / g)) 步骤2:转换为前缀或后缀 ...

  3. python【数据结构与算法】表达式(前缀中缀后缀表达式)与Two fork tree

    文章目录 1 相关概念 2 与二叉树关系 3 表达式转换 4 另一种方法 1 相关概念 前缀表达式(Prefix Notation)是指将运算符写在前面操作数写在后面的不包含括号的表达式,而且为了纪念 ...

  4. 数据结构:前缀,中缀,后缀表达式(逆波兰表达式)

    前缀表达式(波兰表达式) 前缀表达式的运算符位于操作数之前. 比如 (1+2)*3-4  对应的前缀表达式就是: - * + 1 2 3 4 前缀表达式的计算机求值 从右至左扫描表达式,遇到数字时,就 ...

  5. 前缀中缀后缀表达式的计算求值

    原文在这里 表达式 前缀表达式(波兰表达式) 前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前 举例说明: (3+4)×5-6 对应的前缀表达式就是 - × + 3 4 5 6 前缀表达式求值 ...

  6. 中缀、前缀和后缀表达式

    逆波兰表达式 先说一下中缀表达式,平时我们使用的运算表达式就是中缀表达式,例如1+3*2,中缀表达式的特点就是:二元运算符总是置于与之相关的两个运算对象之间 人读起来比较好理解,但是计算机处理起来就很 ...

  7. 表达式树前缀中缀后缀表达式

    表达式树( expression tree ), 表达式树的树叶是操作数( operand ),比如常数或变量,而其他的节点为操作符( operator )如: 由于这里所有的操作都是二元的,因此这棵 ...

  8. 前缀 中缀 后缀表达式2

    对于未经训练的用户来说,计算机科学领域中数学表达式求值的传统方法即不顺手又难以使用:软件工程师 Nikola.Stepan 旨在改变这些传统方法.他的 applet W3Eval 对表达式求值与您用纸 ...

  9. 前缀中缀后缀表达式介绍

    一 前缀表达式 1 前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前. 2 举例 (3+4)×5-6 对应的前缀表达式是: - × + 3 4 5 6 3 前缀表达式的计算机求值过程 从右至左扫 ...

  10. 前缀 中缀 后缀表达式

    1.前缀表达式叫波兰式,后缀叫逆波兰式 2.中缀表达式转另外两个比较简单,前后缀装中缀较麻烦 3.问题分求表达式还是求值,如果是求值则需要两个栈,一个是操作符栈,一个是操作数栈,等操作符栈入栈完毕后依 ...

最新文章

  1. 一位ACMer过来人的心得【转】
  2. 从KDD 2018最佳论文看Airbnb实时搜索排序中的Embedding技巧
  3. 推荐几款爬虫软件与无需编程的数据分析工具
  4. ANSYS2020R2与Solidworks2019进行关联,但2019安装完后打开出现无法获得下列许可SOLIDWORKS Standard.使用许可文件不支持此版本(-21,126,0)
  5. mac 图形化安装mysql,mac安装mysql图形化工具?
  6. js-数据类型和变量
  7. 20191022每日一句
  8. 软件开发报价的计算方法
  9. H5页面内实现分享给微信好友功能
  10. IRQL(多线程中断请求级别)
  11. ps cs6选择并遮住在哪
  12. 在线查看计算机配置,怎样查看电脑配置信息?
  13. 云杰恒指:8.29恒指期货实盘交易复盘
  14. 百度bae定时任务使用方法
  15. 一口气说出 OAuth2.0 的四种授权方式,面试官会高看一眼
  16. JS题目之数组数据拆分重组转成嵌套对象,让脑细胞活跃下
  17. 未来十年最吃香专业大盘点,有你的吗?
  18. 在单片机C语言中const是什么意思
  19. 计算机网络基础第5版教案,计算机网络基础 第5章教案
  20. 计算机就业最好的专业排名,就业前景最好的15个专业排名,理工类专业占大头,前三都有谁?...

热门文章

  1. @SpringBootApplication与@EnableAutoConfiguration区别
  2. Kotlin入门(29)任务Runnable
  3. 颠覆世界的新技术:区块链
  4. Delphi 7生成XML
  5. SilverLight 初探一
  6. mysql安装,数据库连接
  7. Extjs4快速上手四——实现菜单
  8. Ref_cursor
  9. 【调试工具】之Python调试工具pycharm
  10. 网站移动端500错误_PC网站和移动端网站有什么差异?