《数据结构实战》将后缀表达式变成表达式树------二叉树的应用
来源:互联网 发布:淘宝买的人参 编辑:程序博客网 时间:2024/06/02 03:32
编译原理中对于表达式的管理,前面已经有如何将中缀表达式转为后缀表达式算法了,原理同计算后缀表达式同理,为简单起见,操作符都是简单的二元表达式操作符。因此遇到操作数就形成一个叶子节点,并压栈,遇到操作符,则从栈中取两个节点,形成一颗新的树,并进行压栈。最后从栈中取出的为最终的表达式树。
代码如下:
// 由后缀表达式转换为表达式树#include <iostream>#include <stack>#include <vector>#include <algorithm>struct TreeNode{char cOperator;int nData;TreeNode* lTree;TreeNode* rTree;TreeNode(){cOperator = 0;nData = 0;lTree = NULL;rTree = NULL;}};std::vector<char> g_vectOperators;void InitOperators() // 加载操作符{char* strOperators = { "+-*/" };for (int i = 0; i < strlen(strOperators); i++)g_vectOperators.push_back(*(strOperators + i));}TreeNode* EndExpressToTree(char* strExpress) // 后缀表达式转换为表达式树{if (*strExpress == 0)return NULL;std::stack<TreeNode*> stackExpressNode;while (*strExpress != 0){auto iter = std::find_if(g_vectOperators.begin(), g_vectOperators.end(), [=](char cOperator) { return cOperator == *strExpress; });if (iter != g_vectOperators.end()) // 出栈{TreeNode* pNode = new TreeNode;TreeNode* pTemp = stackExpressNode.top();pNode->rTree = pTemp;stackExpressNode.pop();pTemp = stackExpressNode.top();pNode->lTree = pTemp;stackExpressNode.pop();pNode->cOperator = *strExpress;// 新节点压栈stackExpressNode.push(pNode);}else // 是操作数{TreeNode* pNode = new TreeNode;pNode->nData = *strExpress - 48;stackExpressNode.push(pNode);}strExpress++;}if (stackExpressNode.empty())return NULL;else{TreeNode* pNode = stackExpressNode.top();stackExpressNode.pop();return pNode;}}void DeleteNode(TreeNode*& pNode){if (!pNode)return;DeleteNode(pNode->lTree);DeleteNode(pNode->rTree);delete pNode;pNode = NULL;}int main(){InitOperators();TreeNode* pNode = EndExpressToTree("12+345+**");DeleteNode(pNode);return 0;}
阅读全文
0 0
- 《数据结构实战》将后缀表达式变成表达式树------二叉树的应用
- 《数据结构实战》中缀表达式转后缀表达式----栈的应用
- 【数据结构】中缀表达式构造二叉树转换成后缀表达式
- 【数据结构】后缀表达式-->表达式树
- 二叉树应用——后缀表达式构建表达式树
- 二叉树 计算后缀表达式
- 后缀表达式与二叉树
- 后缀表达式 遍历二叉树
- 二叉树中缀表达式到后缀表达式的转换
- 求解算术表达式结合二叉树的后缀表达式问题
- 中缀表达式变成后缀表达式
- 中缀表达式变成后缀表达式
- 栈应用:中缀表达式转后缀表达式并以二叉树储存
- 二叉树应用-表达式·表达式树·表达式求值(数据结构基础 第6周)
- 前缀、中缀、后缀表达式和二叉树
- [算法学习]后缀表达式转二叉树
- 【后缀表达式+二叉树+层次遍历】HDU1805Expressions
- 栈和二叉树--中缀/后缀表达式的相互转换
- Spring中使用两种Aware接口自定义获取bean
- c++中mfc找不到自定义的ID
- Android之禁止Edittext弹出软键盘和光标正常显示并在光标处增删字符
- 分布式系统学习思路
- java中关键字this和super比较
- 《数据结构实战》将后缀表达式变成表达式树------二叉树的应用
- 简述平均池化和最大池化
- Trafodion 使用OSIM重现问题现场
- 从头到尾解析Hash表算法
- sqlmap实现自动伪静态批量检测
- 面向对象(三):继承
- js闭包可以实现局部变量共享
- MySQL表的四种分区类型详解
- Qt之行编辑器