java表达式二叉树的构建

数据结构之表达式二叉树    java中的树是一种重要的非线性数据结构,我们之前学习的,数组,列表属于线性的数据结构, 直观的的看,Java中的树是数据元素(我们在Java的树中我们称为结点)按照分支的关系组织起来的结构,二叉树则是每个结点最多只有两个子树的有序树,在二叉树中的子树通常称为左子树和右子树。  我们要讲的表达式二叉树是什么呢:怎么生成表达式二叉树呢?下面我举个列子来介绍一下 ,我们在生成表达式二叉树时有个... 阅读详情

表达式二叉树的定义:

通过自然表达式的优先级顺序,构建出与表达式相应的二叉树模型,这样的二叉树模型就是表达式二叉树。

例如:(a*c+b)-d*e 这样的一个表达式,表达式二叉树的存放规则是:数据放在子节点位置,符号放在父节点(或根节点)位置

下面是这个例子的表达式二叉树的模型:

步骤就是先计算a*c,再计算a*c+b,然后再计算d*e,最后计算(a*c+b)-(d*e)

 下面我来详细介绍下它的步骤:

第一步:先取出前两个数和第一个运算符,如下图所示,

第二步:再将得到的结果(假设为x)作为一个数字放回数组数列,在重复第一步。得到如下图所示:

第三步:然后再重复第二步就可以得到表达式二叉树的模型;

下面再来讲一讲构建表达式二叉树编写代码的具体步骤:

1.创建一个节点类,在结点类中可以定义前序遍历、中序遍历、后序遍历,以便后面调用。

2.根据表达式,分别将数字和符号存到两个不同的节点类数组队列中。

3.取出数组队列的前两个数和前一个符号构成一个新的节点,然后删除取出的前两个数和前一个符号,在将这个节点放到存放数字的数组队列的第一位;

4.重复第3步

5.将最后构成的结点赋值给根节点

下面是代码:

一.结点类的代码:

在结点类中,前序遍历、中序遍历、后序遍历主要是运用了递归算法。

public class Node {
Node left;
Node right;
String data;
public Node(){}
public Node(String data){
	this.data=data;
}
//前序遍历
public void frontbianli(Node n){
	System.out.println(n.data);//输出结点n的数据
	if(n.left!=null)
	n.frontbianli(n.left);
	if(n.right!=null)
	n.frontbianli(n.right);	
}
//中序遍历
public void middlebianli(Node n){
	if(n.left!=null){
		n.middlebianli(n.left);
	}
	System.out.println(n.data);//输出结点n的数据
	if(n.right!=null){
		n.middlebianli(n.right);
	}	
}
//后序遍历
public void behindbianli(Node n){
	if(n.left!=null){
		n.behindbianli(n.right);
	}
	System.out.println(n.data);//输出结点n的数据
	if(n.right!=null){
		n.behindbianli(n.left);
	}	
}
}

 二.创建一个二叉树的类

下面是代码:

import java.util.ArrayList;

public class twotree {
Node root=null;//初始化根结点
public void creattree(){
	ArrayList<Node>number =new ArrayList<Node>();//创建一个结点类型数组队列,用来存放数字
	ArrayList<Node>symbol =new ArrayList<Node>();//创建一个结点类型数组队列,用来存放符号
	number.add(new Node("1"));//添加元素
	number.add(new Node("2"));
	number.add(new Node("6"));
	number.add(new Node("8"));
	symbol.add(new Node("+"));
	symbol.add(new Node("+"));
	symbol.add(new Node("-"));
	while(symbol.size()>0){//当存储符号的数组队列大于零时,循环继续,注意:符号数要比数字数少一
		Node num1=number.remove(0);//将存放数字的数组队列的第一个数字移除并把它赋值给num1
		Node num2=number.remove(0);/然后再将存放数字的数组队列的第一个数字移除并把它赋值给num2
		Node s=symbol.remove(0);//将存放符号的数组队列的第一个符号移除并把它赋值给s
		s.left=num1;//将结点对象num1赋值给s的左结点
		s.right=num2;//将结点对象num2赋值给s的左结点
		number.add(0,s);//将符号结点s加入存放数字结点的第一位
	}
	root=number.get(0);//将最后一个结点赋值给根节点
	Node n=new Node();//创建一个新的节点对象
	n.frontbianli(root);//调用前序遍历的方法
	n.middlebianli(root);//调用中序遍历的方法
	n.behindbianli(root);//调用后序遍历的方法
}
public static void main(String []args){
	twotree two=new twotree();//创建类的对象
	two.creattree();执行创建二叉树的方法
}
}

 到这里表达式二叉树就结束了,希望可以给大家提供点帮助。

 

555时基芯片的5种经典电路设计:从方波发生器到PWM调光实战 本文深入解析了555时基芯片的5种经典电路设计,从基础的无稳态方波发生器、单稳态触发器,到实用的占空比可调PWM信号源,并重点介绍了如何引入TVS保护电路增强系统鲁棒性。最后通过一个带保护的PWM LED调光台灯实战项目,综合展示了信号生成、功率驱动与电路保护的核心技术,是电子爱好者掌握模拟电路设计与应用的绝佳指南。 阅读详情

相关推荐

03.Linux下目录动态扩容,以分配home的部分空间给root为例

本篇文章将介绍Linux下分配home目录的部分空间给root目录。大致思路:卸载home,解除其磁盘容量占用->扩容root,增加其磁盘空间->重建恢复home操作演示环境为CentOS系统,其他操作系统例如openEuler也可作为参考。01.Linux下目录扩容,以增加root目录的磁盘容量分配为例操作系统版本如下名称版本CentOS7.6+

ChennyWJS的博客 2337

表达式二叉树的建立

表达式二叉树的定义: 表达式:1+2-95+4。(这里举例用的是简单的加减法) 需要将数字放在叶子节点,将操作符放在分支节点,就构成了一个二叉树,由于存储的是一个表达式,称之为“表达式二叉树”。 这个二叉树是怎么建立的呢? 首先将表达式中的数字和运算符取出来分别存入数字节点链表和运算符节点链表中去; 之后从数字链表中取出前两个节点,从运算符节点数组中取出第一个节点,将前面取出的两个数...

Juily家的小蜜果 3544

硅谷刷屏的ClawdBot,让Mac mini卖爆了!创始人爆料:一人开发、100% AI 写代码

这两天,个人 AI 助手 ClawdBot 席卷硅谷,国内外社交平台上全是关于它的讨论。 在试用后,网友们纷纷给出了很高的评价。“它是迄今为止最伟大的 AI 应用,相当于你 24 小时全天候专属 AI 员工。”Creator Buddy 创始人兼 CEO Alex Finn 盛赞道,“这就是他们 (Anthropic) 希望 Claude Cowork 呈现的样子。”

技术引领业务创新 1584

表达二叉树的构建

    在用java实现表达式二叉树之前,先要明白究竟什么是表达式二叉树。     举个例子,有表达式“(a+b×(c-d))-e/f”,现在将该表达式通过树形图来表示。那么究竟该如何表示呢?下图就是一个绘制好的表达式二叉树模型。所谓的规则就是:运算符放在结点位置,而数字放在子节点位置。通过这样的规则构成一个二叉树,又由于存储的是一个表达式,因此称为“二叉树表达式”              ...

cccrush的博客 3532

大疆无人机地理视频制作全流程:从SRT文件到GIS叠加(附实战避坑指南)

本文详细解析了大疆无人机地理视频制作全流程,从解析SRT文件中的位姿数据,到在GIS软件中构建地理视频工程并生成可分发的文件。文章重点介绍了地理视频的核心概念、数据处理实战技巧,并探讨了其在应急响应、工程巡检等场景的高级应用与精度边界,为GIS工程师和无人机爱好者提供了一份实用的避坑指南。

river的博客 464

从零搭建无人机仿真环境:ROS 2与Gazebo Fortress实战指南

本文提供了一份详细的无人机仿真环境搭建实战指南,基于Ubuntu 22.04系统,整合ROS 2 Humble与Gazebo Fortress两大核心工具。通过分步讲解安装、配置及桥接过程,并引入PX4飞控与XTDrone2工具链,帮助开发者快速构建一个稳定、高效的无人机算法开发与测试平台,有效降低真机测试的成本与风险。

water的专栏 428

表达式二叉树

文章目录1. 表达数二叉树构建2. 表达式二叉树求值3. 代码实现 表达式二叉树是指:用二叉树表示表达式的运算规则,节点元素有两种含义;操作数(包含变量)和运算法。操作数节点都是叶子节点,运算符节点都是二度节点,其中子节点是参加该运算的子表达式。 其中表达式分为前缀(二叉树前序遍历)、中缀(二叉树中序遍历)、后缀(二叉树后序遍历)。 日常中算数表达式习惯的书写习惯为中缀表达式。中序遍历统计运算中先运算的一定为左子树 一般来说通过一种遍历无法确定唯一的一颗二叉树,但是算数表达式比较特殊,表达式二叉树可以根据表

xxy_hl的博客 4202

Python实战:5分钟搞定抖音无水印视频下载(附完整代码)

本文系统介绍了抖音无水印视频下载的多种技术方案,重点解析了抖音视频的获取逻辑与去水印原理。文章提供了从零代码的浏览器插件到可编程的Python脚本的完整实现路径,并附带了详细的代码示例,帮助用户快速构建自己的抖音视频下载工具箱。

weixin_29089057的博客 847

表达式二叉树的构造(java实现)

文章目录一、树的创建1.文字描述2.图文描述二、完整代码三、总结 一、树的创建 1.文字描述 1、开辟两个链表,一个numList存放运算数,一个opeList存放运算符,初始化String number = “”;通过字符串拼接来保存两位及以上的运算数 2、遍历算术表达式。  1)若遇到运算数,通过字符串拼接保存在 number中 继续遍历  2)若遇到运算符,分别将number放入numList,运算符放入opeList  3)number = “”; 3、将算数表达式的

weixin_52939031的博客 1863

CentOS 7下rsyslog日志服务器搭建全攻略:从安装到避坑

本文详细介绍了在CentOS 7系统上搭建rsyslog日志服务器的完整流程,从基础安装到高级配置,包括协议设置、日志模板设计、安全加固和性能优化。特别分享了生产环境中的实战技巧和常见问题解决方案,帮助用户高效构建可靠的日志管理系统。

happy2的博客 687

【STM32 CubeMX】I2C中断方式与DMA方式

在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)通信协议的实现可以采用中断方式或DMA(Direct Memory Access)方式。中断方式通过触发中断来处理数据传输,而DMA方式则利用直接内存访问技术来实现数据传输,减轻了CPU的负担。在选择I2C通信方式时,开发者需要根据具体的应用需求和性能要求来选择合适的方式。STM32 CubeMX提供了图形化配置工具,使得配置I2C通信方式变得更加便捷。

m0_62599305的博客 7744

简单算术表达式二叉树的构建和求值 (数据结构)

简单算术表达式二叉树的构建和求值 (数据结构) 文章目录简单算术表达式二叉树的构建和求值 (数据结构)题目要求思考过程二叉树的特点思路分析代码实现运算结果总结 题目要求 先用二叉树来表示一个简单算术表达式,树的每一个结点包括一个运算符或运算数。在简单算术表达式中只包含 加 减 乘 除 和一位正整数且格式正确(不包括括号),并且要按照先乘除后加减的原则构造二叉树,下图所示为 “1+2*3-4/5” 代数表达式对应的二叉树,然后由对应的二叉树计算该表达式的值。 先用二叉树来表示一个简单算术表达式,树的每一个结

Wu_yongtao的博客 2万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java 表达式树_Java基础——表达式二叉树的Java实现构建(构建+前序、中序、后序遍历)...

1 表达式二叉树1.1 定义二叉树:在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。表达式二叉树:存储表达式的二叉树。首先取出第一个数字45放在叶子节点,遇到“+”后将其放到分支节点,fig1.构建过程1然后将“23”、“*”、“56”、“/”、“2”依次放入,fig2.构建过程2最后放入“-”...

weixin_39634067的博客 462

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java基础——表达式二叉树的Java实现构建(构建+前序、中序、后序遍历)

1 表达式二叉树 1.1 定义 二叉树:在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。 表达式二叉树:存储表达式的二叉树。 如:45+23*56/2-5(例子来源:https://www.cnblogs.com/yuxiuyan/p/5753006.html) 首先取出第一个数字45...

「谁定义我是我」 3315

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Java】构建表达式二叉树和表达式二叉树求值

1. 实现一个简单的计算器。通过键盘输入一个包含圆括号、加减乘除等符号组成的算术表达式字符串,输出该算术表达式的值。要求:(1)系统至少能实现加、减、乘、除等运算;(2)利用二叉树算法思想求解表达式的值,先构造由表达式构成的二叉树,按中序、后序遍历的方式输出二叉树中的结点,然后再利用通过对二叉树进行后序遍历求解算术表达式的值。

m0_73520938的博客 1245

[Java]手动构建表达式二叉树,求值,求后序表达式

Inlet类,这颗二叉树是”人力运维“的: package com.hy; public class Inlet { public static void main(String[] args) throws Exception{ // 手动构造表达式二叉树 Node n4=new Node(NodeType.Digit,4,...

weixin_30813225的博客 208

java 表达式树_Java实现表达式二叉树

什么是二叉树,这里不再介绍,可以自行百度:二叉树。在这里利用java实现“表达式二叉树”。表达式二叉树的定义第一步先要搞懂表达式二叉树是个什么东东?举个栗子,表达式:(a+b×(c-d))-e/f。将数字放在叶子节点,将操作符放在分支节点,就构成了一个二叉树,由于存储的是一个表达式,称之为“表达式二叉树”。童靴们可能好奇这个到底是怎么构建的?就拿45+23*56/2-5来说吧。首先取出第一个数字4...

weixin_42181693的博客 759

java前缀表达式二叉树课程设计_表达式构建二叉树(中缀,前缀,后缀)

// TheRealBinaryTreeOfMine.cpp : 定义控制台应用程序的入口点。//#include"stdafx.h"#include#include#include#include#includeusing namespace std;class BinaryNode{public:char date;BinaryNode * leftchild;BinaryNode * rig...

weixin_36033929的博客 581

表达式二叉树的构建

什么是表达式二叉树 ? 表达式二叉树由数字和运算符构成,将运算符作为父节点,数字作为左、右节点。如下图所示: 如何构建树 ? 创建数组队列number_list 和 operation_list,将数字和运算符分别储存在数组队列中。 从number_list中取出两个数字,从operation_list中取出一个运算符,组成一个节点。并且删除相应的数字和节点。 重复第二步,直到数字列表...

A_D_I_D_A_S的博客 1098

利用Java实现表达式二叉树

本文转载自 http://www.cnblogs.com/yuxiuyan/p/5753006.html 表达式二叉树的定义 第一步先要搞懂表达式二叉树是个什么东东?举个栗子,表达式:(a+b×(c-d))-e/f。将数字放在叶子节点,将操作符放在分支节点,就构成了一个二叉树,由于存储的是一个表达式,称之为“表达式二叉树”。                童靴们

maling000_3的博客 1986

利用算术表达式构建二叉树(java实现)

  大学学习数据结构的时候做过一个计算算术表达式字符串结果的小程序,最近学习java接触到了类似的问题,不过不是计算结果,而是利用它来构造二叉树,难度稍微大了一些。我在这里提供两种解决方案。相信很多人都知道怎么计算表达式的值,利用两个栈(符号栈和数字栈)根据运算符优先级进行出栈入栈操作,我们知道将栈中的运算符和数字替换为二叉树的节点就可以在这个过程中顺利的构造一个二叉树出来。第二种方法利用了递归...

chaojihexiang的博客 2090

java前缀表达式二叉树课程设计_根据表达式序列(前缀、中缀、后缀)构建表达式树...

如果输入序列是表达式(前缀表达式、中缀表达式、后缀表达式,中缀表达式要求带括号有几个运算符就带几个)则构建出来的树为表达式树,对该树前、中、后序遍历得到对应序的表达式。不过,中缀表达式带括号,而表达式树不带括号,故中序遍历表达式树时需要加适当的括号才能得到正确的中缀表达式。1、表达式树的构建与遍历0、工具函数(链表节点定义、读取下一个字符、判断字符是否操作数):1 typedef structno...

weixin_42127369的博客 726

java 算数表达式 转成 二叉树_[Java]算术表达式组建二叉树,再由二叉树得到算式的后序和中序表达式...

packagecom.hy;importjava.util.List;//以算术表达式为基础构建一棵二叉树,它是算术表达式的语法树public classTree {//根节点privateNode root;//infixList为分词完毕的中序表达式列表public Tree(ListinfixList){root=build(infixList,0,infixList.size());}//...

weixin_42501161的博客 565

Java实现表达式二叉树

表达二叉树的特点:运算符作为父节点,运算的数字分别为左右子节点 第一步:遍历公式,找出所有的运算符和 数字,分别构建节点存储 第二步:从运算符列表中去除第一个运算符,取出两个运算的数字,构建一个节点,并且放回数字列表中 第三步:重复第二步,直到数字列表只剩一个节点,该节点就是根节点 节点的属性:左右子节点,数据 节点类的代码: public class Node { pr...

lzq1326253299的博客 1219
上一篇: 算法基础——冒泡排序、选择排序、插入排序的分析
下一篇: java反射机制
coder150806
博客等级 码龄8年 79粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值