Routes 7, 11, 16, 28, 33, 42, 44, 45, 46 & 47, Azalea Town, Vermillion City, Celadon City, Mt. Silver.
You can also get them if you headbutt trees in specific locations. I think you can get one from the trees below Goldenrod City, close to the daycare.
Chat with our AI personalities
Yes, you can capture Heracross in Pokemon HeartGold (And in Pokemon SoulSilver). You must go to Azalea Town and heabutt into the trees there, and eventually you will encounter one.
on a island
In Pokemon Crystal Version, a Heracross will occasionally appear when you use headbutt on trees.
on route 6665
You have to use headbutt on a "Headbutt Tree". I've heard that the trees outside of New Bark Town is the best place to find one. Although, Heracross is one of the rarest to find.