1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
#include <stdio.h>
#ifdef MEMDBG
#include "memdbg.h"
#endif
#include "treestruct.h"
treenode treeroot(t)
tree t;
{
if(nottree(t) && notnode(t))
return(NULL);
if(nottree(t))
return(((treegen)t)->t->root);
else
return(t->root);
}
firstsubtree(n, l)
/* starts up looping on node n,
access subtree as subtree(firstsubtree(n)) */
treenode n;
list *l;
{
if(notnode(n))
return(NULL);
*l=firstnode(n->branches);
while(*l!=NULL)
{
if(((treebranch)nodeobj(*l))->up!=n)
*l=nextnode(*l);
else
break;
}
}
lastsubtree(n, l)
/* starts up looping on node n, going backward */
treenode n;
list *l;
{
if(notnode(n))
return(NULL);
*l=(list)lastnode(n->branches);
while(*l!=NULL)
{
if(((treebranch)nodeobj(*l))->up!=n)
*l=prevnode(*l);
else
break;
}
}
nextsubtree(n, l)
/* return the next subtree of node n */
treenode n;
list *l;
{
*l=nextnode(*l);
while(*l!=NULL)
{
if(((treebranch)nodeobj(*l))->up!=n)
*l=nextnode(*l);
else
break;
}
}
prevsubtree(n, l)
treenode n;
/* return the next subtree of a node, going backward */
list *l;
{
*l=prevnode(*l);
while(*l!=NULL)
{
if(((treebranch)nodeobj(*l))->up!=n)
*l=prevnode(*l);
else
break;
}
}
|