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

转换算术表达式

文章目录


构造二叉树表示的算术表达式:按先序次序输入二叉树中结点的值(操作数及运算符均以一位字符表示,注意转换),
'#'字符表示空树,如上图的算术表达式
输入+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.kler.cn/a/519990.html

相关文章:

  • 深入MapReduce——计算模型设计
  • python3+TensorFlow 2.x(五)CNN
  • Redis实战(黑马点评)——涉及session、redis存储验证码,双拦截器处理请求
  • Golang Gin系列-8:单元测试与调试技术
  • 基于SpringBoot+WebSocket的前后端连接,并接入文心一言大模型API
  • SkyWalking介绍
  • 2025年01月24日Github流行趋势
  • 为AI聊天工具添加一个知识系统 之63 详细设计 之4:AI操作系统 之2 智能合约
  • CLion开发Qt桌面
  • MySQL 基础学习(1):数据类型与操作数据库和数据表
  • Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多特征分类预测(附模型研究报告)
  • gradle创建springboot单项目和多模块项目
  • C++实现设计模式---命令模式 (Command)
  • 系统架构设计中的性能优化策略
  • Python3 正则表达式:文本处理的魔法工具
  • 【2024年华为OD机试】(C卷,100分)- 最大矩阵和 (JavaScriptJava PythonC/C++)
  • go-引入未失使用的处理
  • 绘制决策树尝试3
  • openlayer getLayerById 根据id获取layer图层
  • 【漫话机器学习系列】058.特征重要度(Feature Importance)
  • Vue 响应式渲染 - 指令
  • css3 svg制作404页面动画效果HTML源码
  • 【JVM】调优
  • Python 常用运维模块之Shutil 模块
  • 绝缘栅双极性晶体管(IGBT)
  • CF 339A.Helpful Maths(Java实现)