Since the trees aren't moving you could setup some kind of spatial partitioning so you only check for collisions around the player. Basically the idea is to divide the layout into say 100x100 squares and keep a list of all the uids of the objects touching the squares. You could use a 2d array with a 1d array for each cell to do this.
After that's setup you check for collisions only with trees that in the cells the player is touching.
The idea is elementary, implementing it with events is doable, although tedious for most.