表达式树基本上是用于表示表达式的二叉树。在表达式树中,节点对应于运算符,每个叶节点对应于操作数。这是一个C ++程序,用于按顺序,前顺序和后顺序遍历为后缀表达式构造一个表达式树。

算法Begin

Function r() has a character variable as parameter.

If the characters are + or - or * or / then

Return will be -1

If the characters are from A to Z then

Return will be 1.

If the characters are from a to z then

Return will be 1.

Else

Return -100.

Function construct_expression_tree() to construct the expression tree

Function push() to push values in the stack

Function pop() to pop values from the stack

Function preOrder() for pre-order traversal

Function inOrder() for in-order traversal

Function postOrder() for post-order traversal

End.

范例程式码#include

using namespace std;

struct n {

char d;

n *l;

n *r;

};

char pf[50];

int top = -1;

n *a[50];

int r(char inputch) {

if (inputch == '+' || inputch == '-' || inputch == '*' || inputch== '/')

return (-1);

else if (inputch >= 'A' || inputch <= 'Z')

return (1);

else if (inputch >= 'a' || inputch <= 'z')

return (1);

else

return (-100);

}

void push(n *tree) {

top++;

a[top] = tree;

}

n *pop() {

top--;

return (a[top + 1]);

}

void construct_expression_tree(char *suffix) {

char s;

n *newl, *p1, *p2;

int flag;

s = suffix[0];

for (int i = 1; s != 0; i++) {

flag = r(s);

if (flag == 1) {

newl = new n;

newl->d = s;

newl->l = NULL;

newl->r = NULL;

push(newl);

} else {

p1 = pop();

p2 = pop();

newl = new n;

newl->d = s;

newl->l = p2;

newl->r = p1;

push(newl);

}

s = suffix[i];

}

}

void preOrder(n *tree) {

if (tree != NULL) {

cout <d;

preOrder(tree->l);

preOrder(tree->r);

}

}

void inOrder(n *tree) {

if (tree != NULL) {

inOrder(tree->l);

cout <d;

inOrder(tree->r);

}

}

void postOrder(n *tree) {

if (tree != NULL) {

postOrder(tree->l);

postOrder(tree->r);

cout <d;

}

}

int main(int argc, char **argv) {

cout <

cin >> pf;

construct_expression_tree(pf);

cout <

inOrder(a[0]);

cout <

preOrder(a[0]);

cout <

postOrder(a[0]);

return 0;

}

输出结果Enter Postfix Expression : 762*+6+

In-Order Traversal : 7+6*2+6

Pre-Order Traversal : ++7*626

Post-Order Traversal : 762*+6+

c语言后缀表达式构造二叉树,C ++程序为后缀表达式构造表达式树相关推荐

  1. 72 中序遍历和后序遍历树构造二叉树

    原题网址:https://www.lintcode.com/problem/construct-binary-tree-from-inorder-and-postorder-traversal/des ...

  2. LintCode-73.前序遍历和中序遍历树构造二叉树

    前序遍历和中序遍历树构造二叉树 根据前序遍历和中序遍历树构造二叉树. 注意事项 你可以假设树中不存在相同数值的节点 样例 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 ...

  3. 7-2 后序+中序序列构造二叉树

    7-2 后序+中序序列构造二叉树 后序+中序序列构造二叉树 输入样例: 第一行输入序列长度n,第二行输入n个字符表示二叉树后序遍历的序列,第三行输入n个字符表示二叉树中序遍历的序列 9 GHDBEIF ...

  4. 文兄的算法题——算术表达式递归构造二叉树

    正在奋斗天津大学的文兄前两天在做算法的时候遇到了一道棘手的题目. 当然,以文兄的聪明才智都不好解决的,我看着也一脸懵逼.然而有万能的度娘,最后还是找到了解决方案.然而说的不是很详细,这里给出我和文兄对 ...

  5. leetcode 106. 从中序与后序遍历序列构造二叉树 c语言递归解法

    如题: 根据一棵树的中序遍历与后序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素.例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9, ...

  6. leetcode 105. 从前序与中序遍历序列构造二叉树 c语言递归解法

    如题: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素.例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3 ...

  7. 实验c语言程序数据类型,C语言程序设计实验报告——实验2--数据类型、运算符和表达式.doc...

    C语言程序设计实验报告--实验2--数据类型.运算符和表达式.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档 ...

  8. 由序列确定二叉树:前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 代码实现(c语言)

    下面三种序列可以唯一的构造唯一的一棵二叉树: 前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 #include<stdio.h> #inc ...

  9. c语言12之编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加减乘除。

    题目: 设计一个简单的计算器程序,要求根据用户从键盘输入的表达式: 操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加减乘除. 源代码: #include<stdio.h> ...

最新文章

  1. 一次综合的、深入浅出的压感的回顾与总结
  2. signature=d3634edefd0f91592d1c7b65bef4a31d,Additional file 14
  3. 聊聊高并发(三十五)Java内存模型那些事(三)理解内存屏障
  4. Bzoj3924 [Zjoi2015]幻想乡战略游戏
  5. P7276-送给好友的礼物【dp】
  6. 职场上个人的核心技术_职场上,靠谱比聪明更重要:如何做一个靠谱的人
  7. jquery validate验证remote时的多状态问题
  8. jenkins com.jcraft.jsch.JSchException: Auth cancel
  9. 【论文笔记】—低光图像增强—Zero-reference—ZeroDCE—2020-CVPR
  10. 手动修改dns服务器设置,手动设置dns地址服务器
  11. 世预赛:12强赛首战国足0-3不敌澳大利亚,下一场面对日本队国足会如何调整?
  12. 《工业控制系统信息安全防护指南》实施建议(下)
  13. 巧用Mac上的Spotlight搜索
  14. 审车按月还是日期_车辆年检年审时间,看月份还是看日期
  15. 农村小伙从月薪2000多到年薪几十万,我的这条路大多数搬砖人都能走 ǃ
  16. littleVGL学习笔记9——lv_btn 按钮
  17. 求证:原函数与逆函数具有相同的单调性
  18. 惠普暗影精灵8和惠普暗影精灵8 Plus 评测
  19. msi笔记本u盘装linux,微星msi电脑重装系统_微星笔记本一键U盘重装系统教程图解...
  20. Git、GitLab这辈子的错都报完了 You have not concludedUnlink of file、 Pulling is not possible、Your local changes

热门文章

  1. The Power of Ten – Rules for Developing Safety Critical Code
  2. POJ 1028: Web Navigation
  3. CheckStyle, 强制你遵循编码规范
  4. React Native开发之必备React基础
  5. Node.js和NoSQL开发比特币加密货币应用程序(下)
  6. MySQL数据库的高可用方案总结
  7. 如何高性能的给UIImageView加个圆角
  8. 解决小米手机无法收到开机广播的问题
  9. hbase shell命令扩展(转自http://www.netfoucs.com/cuirong1986/article/details/7986900)
  10. opencv6.1-imgproc图像处理模块之平滑与形态学操作