前缀转后缀(表达式)
问题描述:
前缀表达式转成后缀表达式,示例:
* + 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
前缀转后缀(表达式)相关推荐
- 中缀表达式转换为前缀及后缀表达式并求值【摘】
它们都是对表达式的记法,因此也被称为前缀记法.中缀记法和后缀记法.它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前:中缀和后缀同理. 举例: (3 + 4) ...
- 中缀表达式转换为前缀或后缀表达式的手工做法
以 a/b + ( c*d - e*f) / g 为例: 步骤1:按照运算符的优先级对所有的运算单元加括号. ((a/b) + (( (c*d) - (e*f)) / g)) 步骤2:转换为前缀或后缀 ...
- python【数据结构与算法】表达式(前缀中缀后缀表达式)与Two fork tree
文章目录 1 相关概念 2 与二叉树关系 3 表达式转换 4 另一种方法 1 相关概念 前缀表达式(Prefix Notation)是指将运算符写在前面操作数写在后面的不包含括号的表达式,而且为了纪念 ...
- 数据结构:前缀,中缀,后缀表达式(逆波兰表达式)
前缀表达式(波兰表达式) 前缀表达式的运算符位于操作数之前. 比如 (1+2)*3-4 对应的前缀表达式就是: - * + 1 2 3 4 前缀表达式的计算机求值 从右至左扫描表达式,遇到数字时,就 ...
- 前缀中缀后缀表达式的计算求值
原文在这里 表达式 前缀表达式(波兰表达式) 前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前 举例说明: (3+4)×5-6 对应的前缀表达式就是 - × + 3 4 5 6 前缀表达式求值 ...
- 中缀、前缀和后缀表达式
逆波兰表达式 先说一下中缀表达式,平时我们使用的运算表达式就是中缀表达式,例如1+3*2,中缀表达式的特点就是:二元运算符总是置于与之相关的两个运算对象之间 人读起来比较好理解,但是计算机处理起来就很 ...
- 表达式树前缀中缀后缀表达式
表达式树( expression tree ), 表达式树的树叶是操作数( operand ),比如常数或变量,而其他的节点为操作符( operator )如: 由于这里所有的操作都是二元的,因此这棵 ...
- 前缀 中缀 后缀表达式2
对于未经训练的用户来说,计算机科学领域中数学表达式求值的传统方法即不顺手又难以使用:软件工程师 Nikola.Stepan 旨在改变这些传统方法.他的 applet W3Eval 对表达式求值与您用纸 ...
- 前缀中缀后缀表达式介绍
一 前缀表达式 1 前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前. 2 举例 (3+4)×5-6 对应的前缀表达式是: - × + 3 4 5 6 3 前缀表达式的计算机求值过程 从右至左扫 ...
- 前缀 中缀 后缀表达式
1.前缀表达式叫波兰式,后缀叫逆波兰式 2.中缀表达式转另外两个比较简单,前后缀装中缀较麻烦 3.问题分求表达式还是求值,如果是求值则需要两个栈,一个是操作符栈,一个是操作数栈,等操作符栈入栈完毕后依 ...
最新文章
- 一位ACMer过来人的心得【转】
- 从KDD 2018最佳论文看Airbnb实时搜索排序中的Embedding技巧
- 推荐几款爬虫软件与无需编程的数据分析工具
- ANSYS2020R2与Solidworks2019进行关联,但2019安装完后打开出现无法获得下列许可SOLIDWORKS Standard.使用许可文件不支持此版本(-21,126,0)
- mac 图形化安装mysql,mac安装mysql图形化工具?
- js-数据类型和变量
- 20191022每日一句
- 软件开发报价的计算方法
- H5页面内实现分享给微信好友功能
- IRQL(多线程中断请求级别)
- ps cs6选择并遮住在哪
- 在线查看计算机配置,怎样查看电脑配置信息?
- 云杰恒指:8.29恒指期货实盘交易复盘
- 百度bae定时任务使用方法
- 一口气说出 OAuth2.0 的四种授权方式,面试官会高看一眼
- JS题目之数组数据拆分重组转成嵌套对象,让脑细胞活跃下
- 未来十年最吃香专业大盘点,有你的吗?
- 在单片机C语言中const是什么意思
- 计算机网络基础第5版教案,计算机网络基础 第5章教案
- 计算机就业最好的专业排名,就业前景最好的15个专业排名,理工类专业占大头,前三都有谁?...