表达树—轻松获取前缀、中缀、后缀表达式(二)

一、回顾二叉树的递归遍历

  前序遍历:访问根结点-->前序遍历根结点的左子树-->前序遍历根结点的右子树。

  中序遍历:中序遍历根结点的左子树-->访问根结点-->中序遍历根结点的右子树。

  后序遍历:后序遍历根结点的左子树-->后序遍历根结点的右子树-->访问根结点。

二、二叉树递归遍历获得表达式

  假设,已知中缀表达式为:(A+B*C)/D,需要获得前缀表达式,后缀表达式。

  

  总结:表达树的前序遍历为前缀表达式,中序遍历为中缀表达式,后续遍历为后缀表达式。

  前缀表达式(前序遍历):/+A*CBD。

  中缀表达式(中序遍历):A+B*C/D。

   后缀表达式(后序遍历):ACB*+D/。

时间: 2024-08-04 22:31:07

表达树—轻松获取前缀、中缀、后缀表达式(二)的相关文章

前缀 中缀 后缀表达式

1.前缀表达式叫波兰式,后缀叫逆波兰式 2.中缀表达式转另外两个比较简单,前后缀装中缀较麻烦 3.问题分求表达式还是求值,如果是求值则需要两个栈,一个是操作符栈,一个是操作数栈,等操作符栈入栈完毕后依次出栈,并把操作数栈顶两个操作数计算并将 结果重新压入栈 4.只有中缀表达式有括号一说,波兰式和逆波兰式的运算顺序严格定义,不需要括号 5.计算机并没有中缀计算能力,需转化为波兰式或逆波兰式 6.波兰式和逆波兰式转中缀的编程题还没见到,只见到填空题有,可能因为计算机更需要的是波兰式和逆波兰式 7.中

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

中缀表达式:a+b*c-(d+e) 第一步:按照运算符的优先级对所有的运算单位加括号:式子变成了:((a+(b*c))-(d+e)) 第二步:转换前缀与后缀表达式 前缀(波兰式):把运算符号移动到对应的括号前面 则变成了:-( +(a *(bc)) +(de)) 把括号去掉:-+a*bc+de 前缀式子出现 后缀(逆波兰式):把运算符号移动到对应的括号后面 则变成了:((a(bc)* )+ (de)+ )- 把括号去掉:abc*+de+- 后缀式子出现

中缀、前缀和后缀表达式

我们学习的算法中的表达式有中缀.前缀和后缀之分,到底有什么区别呢? 中缀(INFIX) 中缀表达式(infix expression)可以是单个变量,或两个变量以及中间的操作符. AA + B(A + B) + (C – D) 前缀(PREFIX) 前缀表达式(prefix expression)可以是单个变量,一个操作符,后面跟两个操作数,每个前缀表达式包括一个操作符和两个操作数. A+ A B+ + A B – C D 后缀(POSTFIX) 后缀表达式(postfix expression

中缀表达式转前缀和后缀表达式

中缀转前缀 #ifndef POSTFIX_TO_NIFIXEXPRESS_H #define POSTFIX_TO_NIFIXEXPRESS_H #include<iostream> #include<string> #include<stack> /************************************************************************/ /* 中缀表达式转前缀表达式 建立一个栈来保存运算符,和一个字符容器存字

139. 回文子串的最大长度(回文树/二分,前缀,后缀和,Hash)

题目链接 : https://www.acwing.com/problem/content/141/ #include <bits/stdc++.h> using namespace std; const int MAXN = 1000005 ; const int N = 26 ; struct Palindromic_Tree { //cnt最后count一下之后是那个节点代表的回文串出现的次数 int next[MAXN][N] ;//next指针,next指针和字典树类似,指向的串为当

数据结构之 栈和队列---算术表达式的转换(前缀+中缀+后缀)

算术表达式的转换 Time Limit: 1000MS Memory limit: 65536K 题目描述 小明在学习了数据结构之后,突然想起了以前没有解决的算术表达式转化成后缀式的问题,今天他想解决一下. 因为有了数据结构的基础小明很快就解出了这个问题,但是他突然想到怎么求出算术表达式的前缀式和中缀式呢?小明很困惑.聪明的你帮他解决吧. 输入 输入一算术表达式,以\'#\'字符作为结束标志.(数据保证无空格,只有一组输入) 输出 输出该表达式转换所得到的前缀式 中缀式 后缀式.分三行输出,顺序

Hdu 5147 Sequence II(树状数字 or 线段树 + 输入外挂 前缀和+后缀和)

题意: 给定1~n的一个排列 用A[]数组保存,问有多少下标(a,b,c,d)四元组满足: a 解析: 题目中n的范围是50000,O(n^2) 复杂度肯定超时.那么这题明显考察的是log2(n)的算法,对于这题可以用线段树或者树状数组,同时要用到输入外挂,不然会超时. 思路(参考别人做法) 枚举c的位置,那么每一次枚举中的方法数为 1~c-1 中(a,b)的个数 乘以 c~n中(c,d)的个数.累加起来即为答案. 1~c-1中(a,b)的个数相当于枚举b的位置,然后计算出b前面有多少数比A[b

HDU5147 Sequence II(树状数组+前缀和+后缀和)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5147 题意: 统计有多少个四元组,满足a[i]<a[j]<a[k]<a[q] i<j<k<p 分析: 要统计四元组的数量我们可以通过枚举c,然后统计区间[1,c-1]有多少二元组(a,b)满足a<b且Aa<Ab,以及统计出区间 [c+1,n]有多少d满足Ac<Ad,根据乘法原理,把这两项乘起来就可以统计到答案里了. 然后我们来处理子问题:区间[1,c-1

中缀表达式转换成前缀表达式和后缀表达式

35,15,+,80,70,-,*,20,/                   //后缀表达方式 (((35+15)*(80-70))/20)=25           //中缀表达方式 /,*,+,35,15,-,80,70, 20                 //前缀表达方式 人的思维方式很容易固定~~!正如习惯拉10进制.就对2,3,4,8,16等进制不知所措一样~~! 人们习惯的运算方式是中缀表达式.而碰到前缀,后缀方式..迷茫其实仅仅是一种表达式子的方式而已(不被你习惯的方式)我