In the last section I mentioned elevation. Most race directors publish what is known as an elevation profile. It's essentially a graph representing how many hills the course has. The “spikier” the graph, the more hills. Also, the steeper the graph, the steeper the hill.
Here's an elevation chart of the Western States 100 Mile Endurance Run:
The Y axis represents altitude starting at sea level. The X axis represents distance. You can count the number of hills or “climbs” by the number of peaks. In the case of Western States, there are nine significant climbs.
Elevation charts can be a little deceptive based on appearance alone. Here's an elevation profile for the Leadville Silver Rush 50 miler. Note the X axis starts at 9,800 feet and you climb to about 12,100 feet. It's a pretty rugged race.
Let's take the exact same profile, but change the numbers a bit. Notice the elevation at the left. Instead of a high-altitude mountain ultra up and down mountains, the course is now near sea level with a few 55 foot gentle hills.
The scale matters, even if the graphic looks intimidating. Many recommend a flat course for beginners. Again, I'd recommend picking a course with similar climbs and altitude than your training trails. People that train in the rough stuff usually have some difficulty going to the flat stuff.
If you train at high altitude, you can run a race at lower altitude without problems. Going from low-altitude training to a high altitude (> 8,000 feet) race can be problematic, though. The lower concentration of oxygen can cause altitude sickness. Unless that's your thing. Sure it can be life-threatening, but some people may be into nosebleeds, hangover symptoms, and cerebral edema. To each their own... I guess.