3x3 is pretty small, so you COULD just check every possibility. theres only 8 different ways that there can be an empty space between 2 others so it wouldn't be too bad. basically if s1 and s3 have plants that arent the same, kill them and make a new plant in s2 thats a hybrid. and do that for each of the 8 ways.
but...if you plan on having larger grids (4x4 has already has 24 different ways, 3x as many) then that would get to be impossibly hard very fast. that would probably need each square to be told to check all possible squares 2 space away with a loop and then make a hybrid if a match is found.
one thing to concider that you might have missed. what happens if there are plants on squares 1 and 9, then another is put in square 3? will the hybrid for in both 2 and 6? or just the suare that gets checked first?
EDIT: hmm, i missed the "have an adjacent empty square" part. that would add a bunch more options, total of 28 i think. Still doable with checking each option, but alot harder. and in some cases there can be 2 adjacent empty squares for the same 2 plants, again there needs to be somethign to deal with that.