In order to utilize this, I would recommend reading the article located at sitepoint.com (Search google for modified preorder tree traversal). It took me quite some time and some help from a coworker to port this from PHP to VB.net. :D
Replace the application("sql").query("*") with your SQL code, I was inclined to write my own SQL class to make querying DB's easier, but you can do whatever you want.
record = application("sql").query("select * from categories order by lft asc")
dim output as new arraylist()
dim right as new arraylist()
do while not record.eof
if right.count > 0
do while right(right.count - 1) < record("rgt").value
right.removeAt(right.count - 1)
if right.count = 0 then exit do
loop
end if
response.write(record("name").value & " is " & right.count & " levels deep in the tree..." & controlchars.cr)
right.add(record("rgt").value)
record.movenext
loop