Yes, it's all about having a way to store, manage, process, parse and execute an expression of any arbitrary complexity.
in fact a flow-chart is a "kind of" expression tree at a high level / with a lot of abstraction.
in part this is also how compilers can optimize code they generate.
one class of compile opt. is called "CSE" Common Sub Expression, say in 3 or more places in a class the same exact for(;

{} loop is in the code, in different methods but in the same class....
the tree gets built for the whole class and the compiler looks at it and find that in n places the same tree of nodes is found...
then it can pull one out and set it aside and make each of the others point to it and when that goes to code generation it only emits code for one for loop but say 4 places (or however many) each call that loop like a function.
very general / abstract overview of one way you have used this and never saw it under the hood.
another thing that happens to most (but not all) trees is they get transformed from Algebraic expression format to stack oriented format.
a CPU always does it's processing based on a stack, local variables, intermidiate values and returns from subroutines all use a stack with Push and Pop operators.
in old 6502 assembly you might do:
LDA $1234
ADD 100
PUSH A,Y
Load the accumulator with location $1234
add 100 to that value
Push that to the Y register.
stuff like that
for another example a stack version of 5 * 5
Push 5
Push 5
*
the "*" op pops 2 values from the stack and then pushes the result backon the stack.
I used to have to think that way for some stuff I worked on in a language based on SmallTalk
nasty stuff to edit, but if you could wrap your head around it you could see a lot of how things work at a low level.