I'd just store all the trees handles in an array,

Code:
#include <acknex.h>
#include <default.c>

#define trees_max 50

var hnd_trees[3][trees_max];

void trees_remove(int group){
	
	ENTITY* ent;
	
	int i;
	for(i = 0; i < trees_max; i++){
		
		you = ptr_for_handle(hnd_trees[group][i]);
		if(you){
			
			ent_remove(you);
		}else{
			
			break;
		}
	}
}


void trees_create(VECTOR* offset, int group, int count){
	
	if(count > trees_max){
		printf("TOO MANY TREES, Increase #define on line 6");
		return;
	}
	
	int i;
	VECTOR pos;
	
	pos.z = 0;
	
	int i;
	for(i = 0; i <= count; i++){
		
		pos.x = offset.x + (random(500)-250); //-250 to 249.99
		pos.y = offset.y + (random(500)-250);
		
		hnd_trees[group][i] = handle(ent_create("tree.mdl", pos, NULL));
	}
	
	
}

void main(){
	
	wait(1);
	
	
	level_load(NULL);

	vec_set(camera.x, vector(0, 0, 5000));
	camera.tilt = -90;
	
	trees_create(vector(0, 0, 0), 0, 10);
	trees_create(vector(-1000, 1000, 0), 1, 10);
	trees_create(vector(1000, 1000, 0), 2, 10);
	
	random_seed(0);
	
	int i;
	while(1){
		
		i = random(3);
		trees_remove(i);
		trees_create(vector(random(2000)-1000, random(2000)-1000, 0), i, integer(random(25)));
		
		wait(-2);
	}
}



make sure your tree model exists
doesn't stop trees spawning in each other
doesn't choose more than 1 model

hope this helps