当前位置: 首页 > 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;
}

结果输出

http://www.lryc.cn/news/218674.html

相关文章:

  • vue的rules验证失效,部分可以部分又失效的原因
  • c#字符串转整数类型
  • 【LeetCode】118. 杨辉三角
  • 【Vue.js】Vue3全局配置Axios并解决跨域请求问题
  • 【车载开发系列】CRC循环冗余校验码原理
  • 数据库实验:SQL的数据更新
  • 3.线性神经网络-3GPT版
  • 大语言模型对齐技术 最新论文及源码合集(外部对齐、内部对齐、可解释性)
  • x264交叉编译(ubuntu+arm)
  • SpringMVC 处理后端日期格式
  • Servlet详解
  • 遥遥领先,免费开源的django4-vue3前后端分离项目
  • 行业安卓主板-基于RK3568/3288/3588的AI智能网络广告机/自动售货机/收银机解决方案(三)
  • 寻找二维数组的最大值和对应下标 | C语言代码
  • 2311dC++连接与串
  • macOS 下 starUML 软件激活方案
  • 一文读懂从 CPU 多级缓存 缓存一致性协议(MESI)到 Java 内存模型
  • MongoDB设置密码
  • 重生奇迹mu召唤师怎么加点?
  • 第九章《搞懂算法:决策树是怎么回事》笔记
  • jar包的精细化运营,Java模块化简介 | 京东云技术团队
  • 「Verilog学习笔记」移位运算与乘法
  • 静态、友好、内在:解析C++中的这些特殊元素和对象复制的优化
  • 【RabbitMQ】 RabbitMQ 消息的延迟 —— 深入探索 RabbitMQ 的死信交换机,消息的 TTL 以及延迟队列
  • CVE-2023-34040 Kafka 反序列化RCE
  • 全局变量和局部变量在for循环的使用
  • pytorch collate_fn测试用例
  • 【qemu逃逸】HITB2017-babyqemu 2019数字经济-qemu
  • Docker Compose学习笔记
  • 基于树 二叉树的回溯搜索算法(DPLL)