I think the answer is: it depends.
If it's likely that you will grow the amount of subcategories over time, you would make one table, with a parent_id as suggested, and probably cache the tree structure display generation, as you need to either get all out categories and build the correct tree in your code, or do some recursion with sql calls.
If you know it will never grow more than x amount of subcategories, you could "hard code" to x amount of tables representing root_categories, sub_categories, sub_sub_Categories (each with parent_id).
You could of course also pre-generate the tree-structures when altering the categories (if you have some way of moving them around etc.) so that you have only one flat table with categories, and fetch the pre-generated trees when needed to display a tree or breadcrumb trail style navigation.
This issue is similar to solving threaded forum issues, so you might look into people solving that in a good way btw.