If a compiler uses abstract syntax trees, it builds them explicitly. Otherwise, they have no purpose. That is why assignment 3 has you construct abstract syntax trees.

You can think of a parser as traversing an implicit parse tree, but it makes no sense to traverse an implicit abstract syntax tree.