打印抽象语法树

时间:2015-05-09 20:11:18

标签: c tree printf abstract-syntax-tree

我试图使用抽象语法树来获取反向波兰表示法,并将其更改为等效的中缀形式。下面是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,基本上是打印最左边的子节点,然后是它的父节点,以及该父节点的右子节点,直到打印完所有树的元素。 我该怎么做呢?

1 个答案:

答案 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;
}

我认为您的问题在于如何构建树。打印功能应该适合您。这是构建树的一种方法。我在你班上。如果你想和我一起见面并一起工作,我就会失败。

相关问题