Невозможно создать дерево разбора из выражения postfix

0

Я пытаюсь создать дерево разбора из постфиксного выражения. Но это дает мне ошибку сегментации.

Вот мой код:

#include <iostream>
#include <stack>
#include <string>
#include <set>
#include <vector>
#include <cstdio>
#include <queue>
#include <list>
using namespace std;

struct my_tree{
    struct my_tree* left;
    char a;
    struct my_tree* right;
};

typedef struct my_tree TREE;


bool is_binary_op(char a){
    if(a == '|' || a == '.') return true;
    else return false;
}

bool is_unary_op(char a){
    if(a == '*') return true;
    else return false;
}

int main() {
    string postfix = "ab|*a.b.";
    stack<TREE*> parse_tree;
    for(unsigned i=0; i<postfix.length(); i++){
        if(is_binary_op(postfix[i])){
            TREE* n;

            TREE* right = parse_tree.top();
            parse_tree.pop();

            TREE* left = parse_tree.top();
            parse_tree.pop();

            n->left = left;
            n->a = postfix[i];
            n->right = right;

            parse_tree.push(n);
        } else if(is_unary_op(postfix[i])){
            TREE* n;

            TREE* left = parse_tree.top();
            parse_tree.pop();

            n->left = left;
            n->a = postfix[i];
            n->right = NULL;

            parse_tree.push(n);
        } else{
            TREE* n;

            n->left = NULL;
            n->a = postfix[i];
            n->right = NULL;
            parse_tree.push(n);
        }
    } 
    return 0;
}
  • 0
    Когда вы использовали отладчик, какая строка вызывает проблему?
  • 0
    n-> left = NULL;
Показать ещё 10 комментариев
Теги:
algorithm
data-structures
expression

1 ответ

1
Лучший ответ

Измените все

TREE *n;

в

TREE *n = new TREE;

поскольку все они кажутся новым узлом на дереве. Вы должны выделить фактический экземпляр operator new.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню