【二叉树】根据后序表达式建立表达式树
来源:互联网 发布:ubuntu recovery 联网 编辑:程序博客网 时间:2024/06/05 06:39
代码:
#include <iostream>#include <cstring>#include "stack.h"using namespace std;class TNode {public: int num; char opt; TNode *left, *right; TNode(int n) { num = n; opt = '#'; left = right = nullptr; } TNode(char c) { num = -1; opt = c; left = right = nullptr; }};class Tree {public: Tree() { root = nullptr; } Tree(TNode* p) { root = p; } void inorder() { inorder(root); } void postorder() { postorder(root); }protected: void inorder(TNode *p); void postorder(TNode *p);private: TNode* root;};void visit(TNode* p) { if (p->opt == '+' || p->opt == '-' || p->opt == '*' || p->opt == '/') cout << p->opt << " "; else cout << p->num << " ";}void Tree::inorder(TNode *p) { if (p != nullptr) { inorder(p->left); visit(p); inorder(p->right); }}void Tree::postorder(TNode *p) { if (p != nullptr) { postorder(p->left); postorder(p->right); visit(p); }}TNode* transverse(char s[]) { Stack<TNode*> S; int temp = 0; for (int i = 0; i < strlen(s); i++) { if (s[i] >= '0' && s[i] <= '9') { // 遇到数字 temp += s[i] - '0'; if (s[i + 1] >= '0' && s[i + 1] <= '9') temp *= 10; else { TNode *p = new TNode(temp); temp = 0; S.push(p); } } else if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') { // 遇到运算符号 TNode *q = new TNode(s[i]); q->right = S.pop(); q->left = S.pop(); S.push(q); if (s[i + 1] == '\0') return q; } }}int main() { char s[100]; cin.getline(s, 100); TNode* p = transverse(s); Tree T = p; T.inorder(); return 0;}
运行结果:
0 0
- 【二叉树】根据后序表达式建立表达式树
- 中缀表达式建立表达式二叉树
- 根据后序和中序建立二叉树
- ACM:树的变换,根据表达式建立表达式树
- 简单中序算术表达式直接建立二叉树测试
- 根据前序/后序/层序+中序遍历序列建立二叉树
- 【建立二叉树】后序建立二叉树
- 按给定的表达式建立相应的二叉树 急急
- 后缀表达式建立二叉树并遍历测试
- 根据二叉树的先序遍历建立二叉树
- 数据结构--java实现二叉树的先序、中序、后序、层次遍历及根据先序中序建立二叉树
- 根据二叉树前序/中序结果,建立二叉树
- UVA548递归二叉树求路径和和根据中序和后序建立二叉树
- 表达式树的建立
- 给定表达式为:a*b+(c-d)/e 建立表达式二叉树
- 二叉树 前序转中序表达式
- 表达式转二叉树
- 表达式二叉树
- 每天进步一点点——ubuntu 13.10中安装google的gtest库
- 杭电-模拟-1280-1035
- Android 防止OOM的一种方法
- Java 中 String 类的常用方法 Ⅰ
- jquery AJAX 实现文件上传
- 【二叉树】根据后序表达式建立表达式树
- 【最小生成树】QS Network ZOJ 1586
- iOS 获取当前正在显示的ViewController
- 模板的概念
- C++ vector容器类型
- EasyUI 折叠面板
- DatePickerDialog和EditText配合使用
- Android--入门--打电话例子
- 字符串匹配算法 之 KMP(Knuth-Morris-Pratt)