【二叉树】根据后序表达式建立表达式树

来源:互联网 发布: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
原创粉丝点击