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

目录

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

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;
}

结果输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/160529.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java高频面试题——Java基础篇

java基本数据类型及对应的字节数&#xff1f;什么是自动拆装箱&#xff1f;int与integer的区别&#xff1f;项目中如何使用&#xff1f; 1.java基本数据类型及对应的字节数&#xff1f; java总共有8中基本数据类型&#xff0c;整型4种&#xff0c;浮点型2种&#xff0c;字符类…

联想服务器-HTTP boot安装Linux系统

HTTP boot与传统PXE的主要差异 HTTP不再需要使用UDP协议的tftp服务&#xff08;连接不可靠、不支持大文件&#xff09;了&#xff0c;只需要dhcp 和http 两个服务即可&#xff0c;支持较稳定的大文件传输。 实验环境 ThinkSystem服务器SR650V2 SR660V2 通过HTTP boot安装Cen…

图像二值化阈值调整——cv2.threshold方法

二值化阈值调整&#xff1a;调整是指在进行图像二值化处理时&#xff0c;调整阈值的过程。阈值决定了将图像中的像素分为黑色和白色的界限&#xff0c;大于阈值的像素被设置为白色&#xff0c;小于等于阈值的像素被设置为黑色。 首先画出灰度直方图&#xff1a;横坐标是灰度值…

项目管理之如何估算项目工作成本

在项目管理中&#xff0c;如何估算项目工作成本是一个关键问题。为了解决这个问题&#xff0c;我们可以采用自上而下的成本限额估算法和自下而上的成本汇总估算法。这两种方法各有优缺点&#xff0c;但都可以帮助我们准确地估算项目工作成本。 自上而下的成本限额估算法 自上…

怎么测量直线模组的精度?

直线模组是一款比较多变的一种产品&#xff0c;适合多种行业&#xff0c;同时它也适合比较多的环境&#xff0c;是一种比较全面的直线运动的装置。直线模组是非常精密的自动化机械设备&#xff0c;在实践中&#xff0c;应该要严格把握具体精度&#xff0c;并且在必要的时候&…

树莓派4无法进入桌面模式(启动后出现彩色画面,然后一直黑屏,但是可以正常启动和ssh)

本文记录了这段比较坎坷的探索之路&#xff0c;由于你的问题不一定是我最终解决方案的&#xff0c;可能是前面探索路上试过的&#xff0c;所以建议按顺序看排除前置问题。 双十一又买了个树莓派 4B&#xff0c;插上之前树莓派 4B 的 TF 卡直接就能使用&#xff08;毕竟是一样规…

面试10000次依然会问的【ReentrantLock】,你还不会?

引言 在并发编程的世界中&#xff0c;ReentrantLock扮演着至关重要的角色。它是一个实现了重入特性的互斥锁&#xff0c;提供了比synchronized关键字更加灵活的锁定机制。ReentrantLock属于java.util.concurrent.locks包&#xff0c;是Java并发API的一部分。 与传统的synchro…

Android ConstraintLayout分组堆叠圆角ShapeableImageView

Android ConstraintLayout分组堆叠圆角ShapeableImageView <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"…

STM32WB55开发(6)----FUS更新

STM32WB55开发.6--FUS更新 概述视频教学硬件准备存储器映射FLASH安全区设置SRAM安全区设置通过USB进行下载注意事项 概述 在 STM32WB 微控制器中&#xff0c;FUS&#xff08;Firmware Upgrade Services&#xff09;是用于固件升级的一种服务。这项服务可以让你更新设备上的无…

GAMP源码阅读:PPP中的模型改正:天线相位中心、天线相位缠绕、潮汐、地球自转效应、引力延迟

原始 Markdown文档、Visio流程图、XMind思维导图见&#xff1a;https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、卫星天线相位中心改正1、原理2、文件读取3、setpcv()&#xff1a;设置天线参数4、satantoff()&#xff1a;卫星 PCO 改正5、satantpcv()&…

红黑树——插入底层实现【C++】面试重灾区!!

目录 前言 一&#xff0c;概念 定义 二&#xff0c;insert 情况一&#xff1a; 情况二&#xff1a; 情况三&#xff1a; insert代码 三&#xff0c; 红黑树验证(面试题) 产生随机数验证 每日一图区&#xff1a; 前言 AVL树是一棵绝对平衡的二叉搜索树&#xff0c;其…

【el-cascader-panel】组件el-cascader-panel使用踩坑

需求背景&#xff1a;角色管理资源&#xff0c;资源返回树形结构数据&#xff0c;左侧树形展示列表可查询&#xff0c;右侧勾选资源权限平铺。 本身组件不支持全选&#xff0c;所以增加了全选按钮。覆写了级联面板宽度。可传只勾选code或者顺序当前节点二维数组列表。 效果 因…