我试图使用抽象语法树来获取反向波兰表示法,并将其更改为等效的中缀形式。下面是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
,基本上是打印最左边的子节点,然后是它的父节点,以及该父节点的右子节点,直到打印完所有树的元素。
我该怎么做呢?
答案 0 :(得分:0)
struct tnode*
build_tree(struct snode **S)
{
struct tnode* root;
if (*S == NULL)
return NULL;
char *top = peek(*S);
if (is_operator(top))
{
root = create_node(top);
pop(S);
root->right = build_tree(S);
pop(S);
root->left = build_tree(S);
return root;
}
root = create_node(top);
return root;
}
我认为您的问题在于如何构建树。打印功能应该适合您。这是构建树的一种方法。我在你班上。如果你想和我一起见面并一起工作,我就会失败。