首页 > 其他分享 >【数一线性代数】014入门

【数一线性代数】014入门

时间:2024-09-24 23:50:57浏览次数:3  
标签:结点 中缀 depth 括号 数一 线性代数 014 表达式 cur

Index

本文稍后补全,推荐阅读:https://blog.csdn.net/weixin_60702024/article/details/141883851

请设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。
例如, 当下列两棵表达式树作为算法的输入时, 输出的等价中缀表达式分别为(a+b)*(c*(-d))和(a*b)+(-(c-d))
在这里插入图片描述
二叉树结点定义如下:

typedef struct node {
    char data[10];              // 存储操作数或操作符
    struct node *left, *right;
} BTree;

要求:
1 - 给出算法的基本设计思想。
2 - 根据设计思想,采用C或 C++语言描述算法,关键之处给出注释。


(本文重点关注算法实现及思路分析,不含具体答题表述)

分析实现

对于中缀表达式,与之对应的遍历方式为中序遍历。中序遍历得到的操作数/符序列与中缀表达式中的序列是相对应的,而本题中除了结点中的操作数/符,还需要额外再考虑括号——“通过括号反映操作符的计算次序”。

从示例中可知,本题中的括号满足以下两点:
1 - 根节点对应运算两侧不加括号;
2 - 其余每个操作符对应结点(即非根非叶结点)的运算两侧需要加括号。

根据以上规则,具体实现如下:

// 二叉树转中缀表达式辅助函数
void tree2ExpUtil(BTree *cur, int depth){
    if(cur==NULL)
        return;
    // 特殊处理叶结点
    if(cur->left==NULL && cur->right==NULL){
        cout<<cur->data;
        return;
    }
    // 1.处理左子树
    if(depth>1)
        cout<<"(";
    tree2ExpUtil(cur->left, depth+1);
    
    // 2.处理当前结点
    cout<<cur->data;

    // 3.处理右子树
    tree2ExpUtil(cur->right, depth+1);
    if(depth>1)
        cout<<")";
}

// 二叉树转中缀表达式
void tree2Exp(BTree *root){
    tree2ExpUtil(root, 1);
}

总结

以上就是通过中序遍历完成二叉树转中缀表达式的实现。

本题重点在于中序遍历,在此基础上,又通过传递当前深度,来判断运算操作是否对应根节点

标签:结点,中缀,depth,括号,数一,线性代数,014,表达式,cur
From: https://blog.csdn.net/weixin_60702024/article/details/142503112

相关文章

  • LeetCode 1014. 最佳观光组合
    题目简介:给你一个正整数数组 values,其中 values[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的 距离 为 j-i。一对景点(i<j)组成的观光组合的得分为 values[i]+values[j]+i-j ,也就是景点的评分之和 减去 它们两者之间的距离。返回一对观......
  • 1014.最佳观光组合
    给你一个正整数数组values,其中values[i]表示第i个观光景点的评分,并且两个景点i和j之间的距离为j-i。一对景点(i<j)组成的观光组合的得分为values[i]+values[j]+i-j,也就是景点的评分之和减去它们两者之间的距离。返回一对观光景点能取得的最高分。示例......
  • noip2014联合权值
    noip2014联合权值题目描述无向连通图G有n个点,n-1条边。点从1到n依次编号,编号为i的点的权值为Wi,每条边的长度均为1。图上两点(u,v)的距离定义为u点到v点的最短距离。对于图G上的点对(u,v),若它们的距离为2,则它们之间会产生Wu×Wv的联合权值。请问图G上所有可产生......
  • 【题解】【枚举】—— [NOIP2014 普及组] 比例简化
    【题解】【枚举】——[NOIP2014普及组]比例简化[NOIP2014普及组]比例简化题目背景题目描述输入格式输出格式输入输出样例输入#1输出#1提示1.思路解析2.AC代码[NOIP2014普及组]比例简化通往洛谷的传送门题目背景NOIP2014普及组T2题目描述在社交媒体......
  • python函数一:函数的概念、函数定义与调用、函数的参数、函数的返回值、说明文档以及函
    文章目录1.函数介绍1.1函数的概念1.2函数定义与调用1.2函数的参数1.3函数的返回值1.4说明文档2.函数的嵌套调用2.1嵌套调用及执行流程2.2嵌套调用的应用1.函数介绍1.1函数的概念什么是函数?函数:是一个被命名的、独立的、完成特定功能的代码段,其可能......
  • 打卡信奥刷题(780)用Scratch图形化工具信P6414[普及组/提高组] [COCI2014-2015#1] PROSJ
    [COCI2014-2015#1]PROSJEK题目描述有一个数列aaa,现在按照下列公式求出一个数列bb......
  • 线性代数学习笔记(一)(2024.7.24)
    向量定义从偏计算机的角度分析,这是排成一列的数。从偏物理的角度分析,这是一条有方向有长度的线段。可以通过数形结合的方式来理解向量。虽然向量的起点不固定,但画平面直角坐标系中的向量,我们一般将向量的起点放在\((0,0)\),用向量的终点表示这个向量,如图:这个向量可以表示......
  • P5979 [PA2014] Druzyny 题解
    对于一个固定的右端点\(r\),左端点\(l\)合法当且仅当\(\max(d_l,d_{l+1},\dotsd_r)\ler-l+1\le\min(c_l,c_{l+1},\dots,c_r)\)。容易得到一个很朴素的dp:记\(f_i\)表示前\(i\)个位置可以分成的组的数目的最大值,\(g_i\)表示有多少种分组方案能达到最大值,直接枚举左端点......
  • [POI2014] TUR-Tourism
    [POI2014]TUR-Tourism题意给出一张图,在这张图中,任意两点间不存在节点数超过\(10\)的简单路径。第\(i\)个点被选的代价为\(C_i\),每个节点要么选,要么与它直接相连的点中至少有一个被选。求最小代价。思路图的生成树上状压动态规划。由于给出的是一张图,无法直接dp,我们可......
  • ORA-01440: column to be modified must be empty (修改列类型时报错:要修改的列必须为
    创建新列:在表中添加一个新的列,然后将数据迁移到新列,最后删除旧列并重命名新列。ALTERTABLE"MESDB"."NC_WORKORDER"ADD("RECEIPT_QUANTITY_NEW"NUMBER(10,6));​--将数据迁移到新列UPDATE"MESDB"."NC_WORKORDER"SET"RECEIPT_QUANTITY_NEW"="RE......