The BSP data is read as a binary chunk from the POF file, and then hard coded offsets are used within those data blocks to navigate around. There's no formal documentation anywhere on the BSP tree (other than a brief explanation at the start of code blocks as to what it expects at each offset - but this changes function to function...).
Problem with just reading the code is that if you miss something during reverse engineering, you've wasted a lot of time, and you'll spend a long time defending your code (and ultimately, it'll be yanked out and circular filed).
Also, the POF format has changed (apparantly) since retail, which doesn't help things.