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

根据中缀二叉树构建中缀表达式

请设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反应操作符的计算次序)并输出,例如,当下列两棵表达式树作为算法的输入时:

输出的等价表达式分别为(a+b)*(c*(-d))和(a*b)+(-(c-d))。

二叉树结点定义如下:

typedef char TElemType[10] ;   //存储操作数或操作符

typedef struct BiTNode{

TElemType data;

struct BiTNode *lchild,*rchild;

}BiTNode,*BiTree;

要求:实现该算法。

解题思路:

中缀二叉树中,叶子节点都是操作数,内部节点都是操作符,所以当遇到操作符时,在外层加上左右括号,并递归向孩子节点,当遇到叶子节点(操作数节点)时,直接输出节点值。

ps:由于最外层不用加括号,所以需要判断是否为根节点(isRoot函数)

Status isRoot(BiTree T)
{
    if(T == root)
        return TRUE;
}
void InOrderTraverse(BiTree T)
{
    if(!T)
        return;
    if(T->lchild || T->rchild)
    {
        if(!isRoot(T))
            printf("(");
        InOrderTraverse(T->lchild);
        printf("%c",T->data);
        InOrderTraverse(T->rchild);
        if(!isRoot(T))
            printf(")");
    }
    else
    {
        printf("%c",T->data);
    }
}

 


http://www.kler.cn/a/414245.html

相关文章:

  • (四)Spring Boot学习——整合修改使用druid连接池
  • 智能产品综合开发 - 智能家居(智能语音机器人)
  • MySQL8 CTE解决不定层级树形迭代问题
  • C++设计模式:桥接模式(Bridge)
  • 基于Springboot的流浪宠物管理系统
  • leetcode 二叉树的最大深度
  • 「Mac畅玩鸿蒙与硬件35」UI互动应用篇12 - 简易日历
  • Unity中的数学应用 之 插值函数处理角色朝向 (初中难度 +Matlab)
  • 【计算机网络】—— 物理层
  • IPguard与Ping32对比评测:数据安全保护谁更强?
  • 【热门主题】000067 React前端框架:探索高效Web开发之路
  • 在C#中使用OpenCV的.net包装器EmguCV
  • 11.25Scala
  • Maven 依赖项配置
  • 初级数据结构——二叉搜索树题库(c++)
  • RHCE——selinux和防火墙
  • 最新特性MCP协议客户端复现
  • 【R安装】VSCODE安装及R语言环境配置
  • 已解决WordPress图片无法显示,免插件实现WordPress上传图片时自动重命名
  • MySQL执行计划explain
  • vmware Ubuntu2004运行STAR-Searcher
  • 结构体详解+代码展示
  • 【Leetcode 每日一题】235. 二叉搜索树的最近公共祖先
  • cocos creator 3.8 合成大西瓜Demo 11
  • 卷积神经网络:图像特征提取与分类的全面指南
  • AIGC时代:如何快速搞定Spring Boot+Vue全栈开发