表达式树
来源:互联网 发布:金融数据分析师工资 编辑:程序博客网 时间:2024/05/16 19:22
表达式树
表达式树的树叶是操作数,如常数或变量,而其他的节点是操作符,如果所有的操作符均是二元的,则构成一棵二叉树。
表达式树的性质
中序遍历 —-> 中缀表达式
后序遍历 —-> 后缀表达式
先序遍历 —-> 前缀表达式
构造一棵表达式树
把后缀表达式转变成表达式树
(由于中缀表达式可以转换成后缀表达式,所以也可以实现将中缀表达式转换成后缀表达式,然后再构造相应的表达式树)
算法思想:
我们一次一个符号的读入表达式。如果符号是操作数,那么就建立一个单节点树并将它推入栈中。如果符号是操作符,那么就从栈中弹出两棵树T1 和 T2(T1先弹出)并形成一棵新的树,该树的根就是操作符,它的左右儿子分别是T2和T1,然后将指向这颗新树的指针亚茹栈中。
<代码>
struct TreeNode{ char val; TreeNode* left; TreeNode* right; TreeNode(char x):val(x),left(NULL),right(NULL){}};TreeNode* createExpressTree(string str){ if(str.empty()) return NULL; stack<TreeNode*> Nodes; int len = str.size(); for(int i = 0 ;i < len; i++) { if(str[i] >= 'a' && str[i] <= 'z') { TreeNode* node = new TreeNode(str[i]); Nodes.push(node); } else if(str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/') { TreeNode* node = new TreeNode(str[i]); if(Nodes.empty()) return NULL; node->right = Nodes.top(); Nodes.pop(); if(Nodes.empty()) return NULL; node->left = Nodes.top(); Nodes.pop(); Nodes.push(node); } } return Nodes.top();}
0 0
- Lambda表达式表达式树
- 表达式与表达式树
- 表达式和表达式树
- 表达式·表达式树·表达式求值
- 表达式·表达式树·表达式求值
- 表达式树---后缀表达式转中缀表达式
- 表达式树---中缀表达式转后缀表达式
- 表达式树
- 表达式树
- 表达式树
- 表达式树
- 表达式树
- 表达式树
- 表达式树
- 表达式树
- 表达式树
- 表达式树
- 表达式树
- litsview优化之高效使用viewHolder
- android http通信之httpclient
- mysql中组内排序编号的一种实现方法。
- ZJOI2002昂贵的聘礼题解
- AFNetWorking取消当前的网络请求
- 表达式树
- Android app 端的 sql 注入
- Mac软件如何安装与卸载
- 欢迎使用CSDN-markdown编辑器
- Maven使用教程
- printf的详细用法
- 高通安卓调试LCD几方面总结
- Android的布局学习笔记
- GridView的属性介绍