In your topic table:
topicid is an auto-incremented unique int
parentid is an int, can be null
label is varchar of some reasonable length
(you also could have a description if you so desire)
Imagine that your data looks like this:
life
animal
mammal
primate
human
reptile
vegetable
(etc)
life is the root of the tree; its parentid is null.
animal and vegetable have their parentid set to life's topicid.
mammal has its parentid set to animal's topicid. And so on.
In your articles table, you would simply need a column to hold the topicid to which the article is mapped.
To find all of a topic's subtopics, you would simply select ... where parentid = the current topicid.
To find all of the articles on a topic, obviously you would query the article table for articles with the current topicid.
To create the "bread crumb trail" navigation that you see on Yahoo, et cetera, you would assemble the string from right to left, starting at the current subtopic level. You look at the parent, then the parent's parent, etc., recursively until you climb all the way back to a record with no parent (which is the root of the tree).
In this example, human's parent is primate; primate's parent is mammal; mammal's parent is animal; animal's parent is life.
You might then print out the trail:
life / animal / mammal / primate / human