A game state is just an object that contains 3 important methods: entry(), exit() and update(). You have to explicitely implement your state to handle when you will enter other state and exit them.

Behavior trees are useful when game state becomes too cluttered, for example if your game logic becomes very complex. A behavior also has 3 function: begin(), update() and end(). A behavior can execute other behaviors in a ordered fashion.