2016-05-02 4 views
0

Я пытаюсь написать функцию дерева выражений, которая принимает выражение символьного массива и выводит префикс, инфикс и постфиксную версию. Я написал этот код, и он не вызывает никаких ошибок, но при запуске рассчитанные значения не распечатываются. Я попытался отладить функцию, но до сих пор не могу найти решение. Кто-нибудь может дать мне какие-либо советы о том, что я делаю неправильно с этим?Использование стека для построения дерева выражений

void Expression_Tree::build_expression_tree(char input[], int size) 
{ 
    ETNode *temp, *t1, *t2; 

    for (int i = 0; i < size; i++) 
    { 
     if(!(i == '+' || i == '-' || i == '*' || i == '/' || i == '^')) { 
      temp = new ETNode; 
      temp->left = temp->right = NULL; 
      temp->input = i; 

      tree_stack.push(temp); 
     } 
     else { 
      temp = new ETNode; 
      temp->left = temp->right = NULL; 
      temp->input = i; 

      t1 = tree_stack.top(); 
      tree_stack.pop(); 
      t2 = tree_stack.top(); 
      tree_stack.pop(); 

      temp->right = t1; 
      temp->left = t2; 

      tree_stack.push(temp); 
     } 
    } 

    temp = tree_stack.top(); 
    tree_stack.pop(); 
} 

Я только включил функцию build_expression_tree, если нет ничего считается неправильным с этим, то это не должно быть ссылок на мой заказовМои, предзаказ и функцию postorder правильно. Благодаря!

+0

Обычный способ в C++ - использовать конструктор для инициализации членов (здесь: 'ETNode'), не позволяя коду пользователя выполнять инициализацию. – stefaanv

+0

@stefaanv У меня есть класс ETNode также – user6276841

+0

Итак, почему вы устанавливаете левый и правый указатели на NULL в коде пользователя? – stefaanv

ответ

2

Это может быть ошибка копирования-вставки, но вы используете i, как если бы это был char.

Я думаю, вы хотите использовать input[i] вместо этого, по крайней мере, в своем заявлении if.

+0

Я попытался это сделать, и он выбросил ошибку сегментации – user6276841

+0

@ user6276841: тогда, возможно, вам стоит проверить, что вы передаете функции. – stefaanv

+0

Это связанный код из моего файла тестера, который передается: 'char input [] = {'2', '+', '(', '3', '*', '(', ' 2 ',' + ',' 2 ',') ',') ',' + ',' 5 '}; int size = sizeof (input)/sizeof (char); Expression_Tree a; a.build_expression_tree (input, size); ' – user6276841