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

转换算术表达式

文章目录


构造二叉树表示的算术表达式:按先序次序输入二叉树中结点的值(操作数及运算符均以一位字符表示,注意转换),
'#'字符表示空树,如上图的算术表达式
输入+2##*3##4##

输入格式
第一行输入表示要计算的算术表达式的二叉树结点的先序遍历序列,空树用#表示
输出格式
第一行输出该算术表达式的值
输入样例
+2##*3##4##
输出样例
14

部分代码如下:

#include "stdio.h"
#include "malloc.h"
#define TRUE 1
#define FALSE 0
#define OK  1
#define ERROR  0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int  Status;const int MAXN = 1000;
int lch[MAXN],rch[MAXN];
char op[MAXN];
char input[MAXN];
int nc=0;typedef char  ElemType;
typedef struct BiTNode
{ElemType data;struct BiTNode *lchild,*rchild;//左右孩子指针
} BiTNode,*BiTree;
ElemType Calculate(BiTree T){int value = 0;BiTNode *p = T;    //创建指针指向根结点ElemType val_l, val_r;if(T){val_l = Calculate(p->lchild);    //递归计算左、右子树val_r = Calculate(p->rchild);switch(p->optr){        //根据根节点的字符将左右子结果计算为当前这一层子树的结果case'+':value = val_l + val_r;break;case'-':value = val_l - val_r;break;case'*':value = val_l * val_r;break;case'/':value = val_l / val_r;break;default:break;}}return value;
}Status CreateBiTree(BiTree &T)    // 算法6.4
{// 按先序次序输入二叉树中结点的值(一个字符),’#’字符表示空树,// 构造二叉链表表示的二叉树T。char ch;scanf("%c",&ch);if (ch=='#') T = NULL;else{if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR;T->data = ch; // 生成根结点CreateBiTree(T->lchild);   // 构造左子树CreateBiTree(T->rchild);  // 构造右子树}return OK;
}int main()   //主函数
{BiTree T;CreateBiTree(T);printf("%d\n",Calculate(T));return 0;
}//main

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
struct TreeNode
{char value;struct TreeNode* left;struct TreeNode* right;
};int calculate(struct TreeNode* root)
{if (root == NULL){return 0;}if (root->left == NULL && root->right == NULL){return root->value - '0';}int left = calculate(root->left);int right = calculate(root->right);switch (root->value){case '+':return left + right;case '-':return left - right;case '*':return left * right;case '/':return left / right;default:return 0;}
}struct TreeNode* createNode(char value)
{struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode));node->value = value;node->left = NULL;node->right = NULL;return node;
}struct TreeNode* buildTree()
{char value = getchar();if (value == '#'){return NULL;}struct TreeNode* node = createNode(value);node->left = buildTree();node->right = buildTree();return node;
}int main()
{struct TreeNode* root = buildTree();printf("%d\n", calculate(root));return 0;
}

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

相关文章:

  • 99.17 金融难点通俗解释:归母净利润
  • 【Flutter】旋转元素(Transform、RotatedBox )
  • MYSQL学习笔记(六):聚合函数、sql语句执行原理简要分析
  • thinkphp6+swoole使用rabbitMq队列
  • 大模型开发 | RAG在实际开发中可能遇到的坑
  • mybatis是什么?有什么作用?mybatis的简单使用
  • 求平均年龄(信息学奥赛一本通-1059)
  • CY T 4 BB 5 CEB Q 1 A EE GS MCAL配置 - MCU组件
  • 10 Hyperledger Fabric 介绍
  • Word 中实现方框内点击自动打 √ ☑
  • 噪声算法 纹理
  • hexo + Butterfly搭建博客
  • 05.KNN算法总结
  • CentOS 7 搭建lsyncd实现文件实时同步 —— 筑梦之路
  • java定时任务备份数据库
  • Vue.js 传递路由参数和查询参数
  • 2025数学建模美赛|F题成品论文
  • 私有包上传maven私有仓库nexus-2.9.2
  • 企业信息化4:免费开源的财务管理系统
  • PyCharm配置Python环境
  • 蓝桥杯3522 互质数的个数 | 数论
  • Effective C++ 规则49:了解 new-handler 的行为
  • 头像生成小程序搭建(免费分享)
  • 手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion(原理介绍)
  • MySQL 基础学习(2): INSERT 操作
  • openstack 客户端命令行简介
  • Oracle查看数据库表空间使用情况
  • [护网杯 2018]easy_tornado1
  • 关于java实现word(docx、doc)转html的解决方案
  • 【8】思科IOS AP升级操作