Expression trees are data structures used to represent mathematical expressions in a hierarchical tree format, where each node is an operator and each leaf is an operand. They are primarily used in compilers and interpreters to analyze, transform, and evaluate expressions efficiently.