首页 > 其他分享 >构造表达式树

构造表达式树

时间:2022-08-17 20:45:07浏览次数:58  
标签:结点 操作数 构造 操作符 栈中 表达式

一个表达式的典型形式(中缀表达式)为

12 + 4 * 5 - ( 4 / 3 + 123 ) 

先将其转换为后缀表达式(可用双栈法)

[12, 4, 5, *, +, 4, 3, /, 123, +, -]

以下构造操作均需将原始数据包装为二叉树结点Node。

 表达式树的叶子结点是操作数,其余结点为操作符

构造时,也需要用到栈来暂存那些部分构造好的子树

首先操作数将直接推入栈中

遇到操作符,便取出栈中的两个结点(可能是操作数,也可能是一个子树),分别作为左右子树挂在操作符结点上,然后将这个新的结点推入栈中。

到最后栈中应该只有一个结点,即为表达式树的根结点。

结果如下

 

标签:结点,操作数,构造,操作符,栈中,表达式
From: https://www.cnblogs.com/xiang-jin-hua/p/16596632.html

相关文章

  • 使用正则表达式替换手机号中间四位数为 * 号
    在有的接口或者界面上,为了保护手机号隐私,因此需要把手机号中间4位数变为*号,这种可以用正则表达式来实现替换构建匹配手机号的正则表达式要求手机号是11位,且第一位是1......
  • springboot~用正则表达式提取bearer token
    前后一体的应用,是这样进行认证的用户向服务端发送验证信息(用户名、密码);服务端验证成功就向用户返回一个sessionid;服务端保存了这个session_id对应的信息,并写入用户......
  • 静态构造函数
    1.静态构造函数用于初始化类中的静态数据或执行仅需执行一次的特定操作。2.静态构造函数将在创建第一个实例或引用类中的静态成员之前自动调用。3.静态构造函数具有以下特......
  • SpringBoot+Lombok+Builder实现任意个数属性的对象构造
    场景某个类有多个属性,在不同的业务场景下需要对不同对象赋值不同的属性。如果使用原始构造方法赋值,需要有几种情况的参数赋值,就在实体类中声明对应参数的构造方法。可以......
  • Python逆向爬虫之正则表达式
    Python逆向爬虫之正则表达式字符串是我们在编程的时候很常用的一种数据类型,检查会在字符串里面查找一些内容,对于比较简单的查找,字符串里面就有一些内置的方法可以处理,对于......
  • Codeforces1698F Equal Reversal【构造】
    分析:注意到你无论如何都无法改变a[1]的值,而你要改变a[2]的值时,你就必须要选择一个和a[1]相同的值,然后翻转这一段区间。又可以发现,任意两个数的相邻情况是不会改变的。比......
  • re相关正则表达式(re.sub、re.I 、re.S、re.M)
    re.I表示忽略大小写re.S表示全文匹配re.M表示全文拼配行尾段位的字符或者数字,影响^和$re.sub表示替换使用方法:re.sub(pattern,repl,string,count=0,flags=0)......
  • 正则表达式
     定义:/[0-9]+/、 /[0-9]+/i、/[0-9]+/g、/[0-9]+/gi规则:^和$匹配一个位置,开始和结束;*、+、?表示重复次数,分别为任意次、至少一次、零次或1次;中括号表示范围[a..z]......
  • 正则表达式查找邮箱等数据
    相当于一个小工具,记录一下。importjava.util.regex.Matcher;importjava.util.regex.Pattern;//正则表达式实例,查找数据中的邮箱手机号和座机号publicclassRegex......
  • 150.evaluate-reverse-polish-notation 逆波兰表达式求值
    题目本身很简单,利用stack即可,注意string转换成int->std::stoi(s),以及先判断是不是运算符,再判断是什么运算符,可以节省时间。#include<stack>#include<string>#include......