Я пытаюсь использовать абстрактное синтаксическое дерево, чтобы принять уравнение обратной польской позиции и изменить его на эквивалентную форму инфикса. Ниже приведена структура AST и print_table
, которые мы первоначально использовали для печати дерева.Печать абстрактного дерева синтаксиса
struct tnode {
char *datum;
struct tnode *left;
struct tnode *right;
};
void print_table(struct tnode *AST) {
if(AST != NULL) {
print_table(AST->left);
printf("%s", AST->datum);
print_table(AST->right);
}
}
Однако это печатает дерево сверху вниз. Например, если задано 5 4 + 3 -
, оно вернет -3+45
. Я хочу, чтобы он печатался: 5+4-3
, по существу печатающий левое большинство дочерних элементов, затем это родительский узел и правый дочерний элемент этого родительского узла, пока не будут напечатаны все элементы дерева. Как я могу это сделать?
Как '5 4 + 3 -' хранится в' tnode'? –
Корень дерева - это -, левый ребенок которого равен +, правый ребенок равен 3. Левое дочернее число + - это 5, правый ребенок - 4. –
Эта функция печати отображается правильно , Я буду держать пари, что ваша функция синтаксического анализа неверна. Ракетная версия вашего кода работает: http://pasterack.org/pastes/29421 –