Thread: RE: [SQL] A path through a tree

RE: [SQL] A path through a tree

From
"Jackson, DeJuan"
Date:
> > If you want to use this for a message board I'd suggest inserting a
> > dummy head that gets excluded from display in your app. instead of
> > trying to have multiple heads.
> >
> > Let me know if you figure out an easy way to display
> treading, haven't
> > tried it myself.
>
> Eek!  Caught!  :)
>
> Thanks again,
>
> Regards,
>
> Neil Burrows

Well, last night I thought it over and a Good(tm) way to display
threading,  hit me.  If you don't ever delete a node, but just it's data
you can use the l and r information recursively to display.

function display(nodeList[][], currentNode, depth) {
   printf("%s|_%s\n", spaces(depth*2), nodeList[currentNode]['title']);
   numChildren = (nodeList[currentNode]['r'] -
nodeList[currentNode]['l'] - 1)/2;
   for(numNodes=0;numNodes < numChildren;
       numNodes += display(nodeList, currentNode+numNodes+1, depth+1)) ;
   numNodes++;
   return numNodes;
}

I hope my psudo-code is decipherable.
Looking at the tree from the previous message:
 l| r|data
--+--+----
 1|12|head
 2| 7|c1
 3| 4|c11
 5| 6|c12
 8| 9|c2
10|11|c3
(6 rows)

And using the information in the above function we get:
|_head
  |_c1
    |_c11
    |_c12
  |_c2
  |_c3

Collapsing and expanding branches could simply be an array of booleans
that's checked at currentNode where true display current node with a
plus (link for html to expand) then return numChildren+1 otherwise do
the loop.

Just thought everybody might like to see this.
    -DEJ
BTW if you want more examples of this data-layout of trees I can send in
the URL's where I found it.