Programming: a skill tree

Here’s something that’s been bothering me for a while. In many modern (heck, even old) RPG, tactical RPG, or strategy games, there is a wealth of skills available to players. However, some skills must be earned while other skills are given near the beginning. The player spends time (either by leveling up, or repeating/doing certain tasks) to populate his/her character with skills. I love to think about the countless possibilities one can create with a skill-tree, but I have run into a practical issue. How to program a skill tree?

Suppose a skill requires that the player’s character have a strength of 50 points or above. That’s simple to understand. My first reaction would be to use an if statement. All’s well, until one sees that if there were hundreds of skills available, and many of them having different (and multiple) pre-requisites, the code would be a mess. Obviously, it’s not quite practical to have hundreds of stacked if statements.

So, how would I go and approach it? I searched over the horizons of the interweb, but found no practical answers (one person suggested looking up Decorator Patterns, which led to me reading tens of other web pages and the wiki page, but still not understanding the concept). Would anyone be kind enough to provide some tips on how to approach this dilemma?

tl;dr: How to program skill tree system without millions of if statements?