当前位置: 首页 > news >正文

树结构及其算法-二叉运算树

目录

树结构及其算法-二叉运算树

C++代码


树结构及其算法-二叉运算树

二叉树的应用实际上相当广泛,例如表达式之间的转换。可以把中序表达式按运算符优先级的顺序建成一棵二叉运算树(Binary Expression Tree,或称为二叉表达式树)。之后按二叉树的特性进行前、中、后序的遍历,即可得到前、中、后序表达式,建立的方法可根据以下两种规则来进行操作:

  1. 考虑表达式中运算符的结合性与优先权,再适当地加上括号。
  2. 由最内层的括号逐步向外,利用运算符当树根,左边操作数当左子树,右边操作数当右子树,其中优先权最低的运算符作为此二叉运算树的树根。

C++代码

#include<iostream>
using namespace std;struct TreeNode {int data;TreeNode* leftNode;TreeNode* rightNode;TreeNode() {this->data = ' ';this->leftNode = nullptr;this->rightNode = nullptr;}TreeNode(int tempData, TreeNode* tempLeftNode = nullptr, TreeNode* tempRightNode = nullptr) {this->data = tempData;this->leftNode = tempLeftNode;this->rightNode = tempRightNode;}
};namespace Tree {TreeNode* CreateExpression(char* sequence, int index, int arraySize) {TreeNode* _TreeNode;if (sequence[index] == ' ' || index >= arraySize)return nullptr;else{_TreeNode = new TreeNode((int)sequence[index]);_TreeNode->leftNode = CreateExpression(sequence, 2 * index, arraySize);_TreeNode->rightNode = CreateExpression(sequence, 2 * index + 1, arraySize);return _TreeNode;}}void Preorder(TreeNode* tempTree) {if (tempTree != nullptr) {cout << (char)tempTree->data << " ";Preorder(tempTree->leftNode);Preorder(tempTree->rightNode);}}void Inorder(TreeNode* tempTree) {if (tempTree != nullptr) {Inorder(tempTree->leftNode);cout << (char)tempTree->data << " ";Inorder(tempTree->rightNode);}}void Postorder(TreeNode* tempTree) {if (tempTree != nullptr) {Postorder(tempTree->leftNode);Postorder(tempTree->rightNode);cout << (char)tempTree->data << " ";}}int Condition(char tempOperator, int num1, int num2) {switch (tempOperator){case '*':return (num1 * num2);case '/':return (num1 / num2);case '+':return (num1 + num2);case '-':return (num1 - num2);case '%':return (num1 % num2);}}int Answer(TreeNode* tempTreeNode) {int num1;int num2;if (tempTreeNode->rightNode == nullptr && tempTreeNode->leftNode == nullptr)return tempTreeNode->data - 48;else {num1 = Answer(tempTreeNode->leftNode);num2 = Answer(tempTreeNode->rightNode);return Condition((char)tempTreeNode->data, num1, num2);}}
};int main() {char data1[]{ ' ', '+', '*', '%', '6', '3', '9', '5' };TreeNode* treeNode;treeNode = Tree::CreateExpression(data1, 1, 8);cout << "前序遍历:" << endl;Tree::Preorder(treeNode);cout << endl;cout << "中序遍历:" << endl;Tree::Inorder(treeNode);cout << endl;cout << "后序遍历:" << endl;Tree::Postorder(treeNode);cout << endl;cout << "二叉运算树结果值:" << endl;cout << Tree::Answer(treeNode) << endl;return 0;
}

结果输出

相关文章:

树结构及其算法-二叉运算树

目录 树结构及其算法-二叉运算树 C代码 树结构及其算法-二叉运算树 二叉树的应用实际上相当广泛&#xff0c;例如表达式之间的转换。可以把中序表达式按运算符优先级的顺序建成一棵二叉运算树&#xff08;Binary Expression Tree&#xff0c;或称为二叉表达式树&#xff09;…...

vue的rules验证失效,部分可以部分又失效的原因

vue的rules验证失效,部分可以部分又失效的原因 很多百度都有,但是我这里遇到了一个特别的,那就是prop没有写全,导致验证某一个失效 例子: 正常写法 el-form-item....多个省略<el-form-item label"胶币" prop"cost"><el-input v-model"form.…...

c#字符串转整数类型

将字符串转换为整数类型。为了方便&#xff0c;C#提供了一个内置的方法TryParse来实现这个功能 字符串&#xff08;String&#xff09;&#xff1a;表示一串字符的数据类型。整数&#xff08;Integer&#xff09;&#xff1a;表示不带小数点的数字。解析&#xff08;Parsing&a…...

【LeetCode】118. 杨辉三角

118. 杨辉三角 难度&#xff1a;简单 题目 给定一个非负整数 *numRows&#xff0c;*生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例…...

【Vue.js】Vue3全局配置Axios并解决跨域请求问题

系列文章目录 文章目录 系列文章目录背景一、部署Axios1. npm 安装 axios2. 创建 request.js&#xff0c;创建axios实例3. 在main.js中全局注册axios4. 在页面中使用axios 二、后端解决跨域请求问题方法一 解决单Contoller跨域访问方法二 全局解决跨域问题 背景 对于前后端分离…...

【车载开发系列】CRC循环冗余校验码原理

【车载开发系列】CRC循环冗余校验码原理 CRC循环冗余校验码原理 【车载开发系列】CRC循环冗余校验码原理一. CRC算法原理二. 生成多项式三. 多项式与其对应代码四. CRC码校验原理1&#xff09;发送端2&#xff09;接收端 五. CRC码原理方法1&#xff09;发送端生成CRC码方法2&a…...

数据库实验:SQL的数据更新

目录 实验目的实验内容实验要求实验步骤实验过程总结 再次书接上文&#xff0c;sql基础的增删改查 实验目的 (1) 掌握DBMS的数据查询功能 (2) 掌握SQL语言的数据更新功能 实验内容 (1) update 语句用于对表进行更新 (2) delete 语句用于对表进行删除 (3) insert 语句用于对表…...

3.线性神经网络-3GPT版

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 线性回归基础优化算法一、线性回归1、买房案例2、买房模型简化3、线性模型4、神经网络5、损失函数6、训练数据7、参数学习8、显示解9、总结 二、 基础优化算法1、梯度下降2、学习率3、小批量随机梯度下降4、批量大小5、…...

大语言模型对齐技术 最新论文及源码合集(外部对齐、内部对齐、可解释性)

大语言模型对齐(Large Language Model Alignment)是利用大规模预训练语言模型来理解它们内部的语义表示和计算过程的研究领域。主要目的是避免大语言模型可见的或可预见的风险&#xff0c;比如固有存在的幻觉问题、生成不符合人类期望的文本、容易被用来执行恶意行为等。 从必…...

x264交叉编译(ubuntu+arm)

1.下载源码 https://code.videolan.org/videolan/x264 在windows下解压&#xff1b;复制到ubuntu&#xff1b; 2.进入源码文件夹-新建脚本文件 touch sp_run.sh 3.在sp_run.sh文件中输入 #!/bin/sh./configure --prefix/home/alientek/sp_test/x264/sp_install --enable-…...

SpringMVC 处理后端日期格式

通过扩展Spring MVC框架的消息转化器 在WebMvcConfiguration中扩展SpringMVC的消息转换器&#xff0c;统一对日期类型进行格式处理 WebMvcConfiguration /*** 扩展Spring MVC框架的消息转化器* param converters*/protected void extendMessageConverters(List<HttpMessag…...

Servlet详解

一.Servlet生命周期 初始化提供服务销毁 1.测试生命周期 package com.demo.servlet;import javax.servlet.*; import java.io.IOException;public class LifeServlet implements Servlet {Overridepublic void init(ServletConfig servletConfig) throws ServletException {…...

遥遥领先,免费开源的django4-vue3前后端分离项目

星域后台管理系统前端介绍 &#x1f33f;项目简介 本项目前端基于当下流行且常用的vue3作为主要技术栈进行开发&#xff0c;融合了typescript和element-plus-ui&#xff0c;提供暗黑模式和白昼模式两种主题以及全屏切换&#xff0c;开发bug少&#xff0c;简单易学&#xff0c…...

行业安卓主板-基于RK3568/3288/3588的AI智能网络广告机/自动售货机/收银机解决方案(三)

广告机 智能网络广告机通过网络将音视频、图片、文档、网页等自由排版创建成节目发布到终端。可针对不同的终端统一管理&#xff0c;统一发布&#xff1b;针对应用场景的集中和分散&#xff0c;可以选用局域网管理和云服务器管理。 自动售货机 随着物联网、大数据、人工智能的…...

寻找二维数组的最大值和对应下标 | C语言代码

题目&#xff1a; 本题目要求读入M(最大为10)行N&#xff08;最大为15&#xff09;列个元素&#xff0c;找出其中最大的元素&#xff0c;并输出其行列值。 输入格式: 输入在第一行中给出行数m和列数n。接下来输入m*n个整数。 输出格式: 输出最大值的行号,列号,值。 输入样例…...

2311dC++连接与串

原文 extern(C)函数使用在装饰名中包括参数类型的C装饰名.但是,因为C没有像D的T[]内置切片类型,因此C没有有效的D切片装饰. 因此,无法编译以D切片为参数的extern(C)函数. 为此,可按结构转换切片: struct DSlice(T) {T* ptr;size_t length;T[] opIndex() > ptr[0 .. length]…...

macOS 下 starUML 软件激活方案

starUML每次打开都弹出提示其实挺烦的&#xff0c;于是研究了一下如何 po 解(激活)它。记录一下方法以便以后使用。 我觉得这个软件很好用&#xff0c;大型项目的所有图我都是用这个软件画的。 直接上步骤&#xff01;先关掉starUML 1、安装 asar&#xff0c;以便可以打开 asa…...

一文读懂从 CPU 多级缓存 缓存一致性协议(MESI)到 Java 内存模型

文章目录 CPU 多级缓存 & 缓存一致性协议&#xff08;MESI&#xff09;CPU 多级缓存缓存一致性协议&#xff08;MESI&#xff09;缓存行&#xff08;Cache line&#xff09;四种缓存状态缓存行状态转换多核协同示例网站体验 MESI优化和引入的问题Store Bufferes & Inva…...

MongoDB设置密码

关于为什么要设置密码 公司的测试服务器MongoDB服务对外网开放的&#xff0c;结果这几天发现数据库被每天晚上被人清空的了&#xff0c;还新建了个数据库&#xff0c;说是要支付比特币。查了日志看到有个境外的IP登录且删除了所有的集合。所以为了安全起见&#xff0c;我们给m…...

重生奇迹mu召唤师怎么加点?

召唤师在重生奇迹mu游戏里面是一个智力型的职业&#xff0c;所以智力自然就成为主要加点属性&#xff0c;但是此职业却又算是近身攻击&#xff0c;因为她的技能范围并不算远&#xff0c;而且还是呈现出一种半径趋势&#xff0c;一方面是攻击伤害&#xff0c;另一方面则是辅助造…...

3D Face HRN效果验证:使用MeshLab量化评估3D重建PSNR与SSIM指标

3D Face HRN效果验证&#xff1a;使用MeshLab量化评估3D重建PSNR与SSIM指标 1. 项目背景与验证意义 3D人脸重建技术近年来取得了显著进展&#xff0c;但如何客观评估重建质量一直是个关键问题。传统的主观视觉评估方法存在明显局限性——不同观察者可能有不同的判断标准&…...

Zotero Citation插件进阶使用指南:从安装到定制的全流程解决方案

Zotero Citation插件进阶使用指南&#xff1a;从安装到定制的全流程解决方案 【免费下载链接】zotero-citation Make Zoteros citation in Word easier and clearer. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-citation [痛点分析]&#xff1a;文献管理中的隐…...

如何用开源工具实现3D打印钥匙自由?从参数测量到模型生成的实践路径

如何用开源工具实现3D打印钥匙自由&#xff1f;从参数测量到模型生成的实践路径 【免费下载链接】keygen OpenSCAD tools for generating physical keys 项目地址: https://gitcode.com/gh_mirrors/ke/keygen 在数字化制造蓬勃发展的今天&#xff0c;3D打印技术正逐步走…...

Llama-3.2V-11B-cot与Dify集成:零代码构建企业AI智能体

Llama-3.2V-11B-cot与Dify集成&#xff1a;零代码构建企业AI智能体 最近和几个做企业服务的朋友聊天&#xff0c;大家普遍有个感觉&#xff1a;现在AI模型能力越来越强&#xff0c;但真要把它们用起来&#xff0c;门槛还是有点高。特别是对于业务部门的人来说&#xff0c;看着…...

避坑指南:lidar_align标定IMU外参时,loader.cpp源码修改与运动轨迹设计的那些关键细节

避坑指南&#xff1a;lidar_align标定IMU外参的核心细节与实战优化 在自动驾驶和机器人定位领域&#xff0c;激光雷达与IMU的联合标定是系统搭建的关键环节。许多开发者在初次使用lidar_align工具时会遇到各种问题——从源码适配的困惑到标定结果的不可靠。本文将深入剖析两个最…...

父子进程变量地址相同值却不同?图解Linux写时拷贝与页表机制

父子进程变量地址相同值却不同&#xff1f;图解Linux写时拷贝与页表机制 你是否曾在Linux环境下遇到过这样的现象&#xff1a;通过fork()创建的子进程与父进程打印同一个全局变量的地址时&#xff0c;两者的地址值完全相同&#xff0c;但实际读取的变量值却不同&#xff1f;这个…...

5个步骤彻底修复Windows更新问题:Reset Windows Update Tool完整指南

5个步骤彻底修复Windows更新问题&#xff1a;Reset Windows Update Tool完整指南 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool …...

如何快速掌握Mermaid在线编辑器:面向初学者的完整可视化工具指南

如何快速掌握Mermaid在线编辑器&#xff1a;面向初学者的完整可视化工具指南 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-l…...

DeepSeek-V3.2量化新标杆:w8a8精度突破86%!

DeepSeek-V3.2量化新标杆&#xff1a;w8a8精度突破86%&#xff01; 【免费下载链接】DeepSeek-V3.2-w8a8-mtp-QuaRot 项目地址: https://ai.gitcode.com/Eco-Tech/DeepSeek-V3.2-w8a8-mtp-QuaRot 导语&#xff1a;DeepSeek-V3.2推出w8a8量化版本&#xff0c;采用创新Qu…...

别只看成功率!拆解AlphaFold3在抗体对接中那60%的失败案例

AlphaFold3抗体对接失败的深层解析&#xff1a;60%案例背后的技术挑战与突破路径 当AlphaFold3&#xff08;AF3&#xff09;在抗体-抗原对接领域取得8.9%的高精度成功率时&#xff0c;科学界为之振奋。但鲜少有人关注到&#xff0c;在单种子采样条件下&#xff0c;这一系统仍有…...