[Home]
[Contents]
[Chapter]
[Previous Algorithm]
[Next Algorithm]


Patricia tree insertion


patricia insert( key, t ) typekey key; patricia t; {patricia p; patricia InsBetween(); int i; if (t==NULL) return( NewDataNode(key) ); for( p=t; !IsData(p); ) p = bit( p->level, key ) ? p->right : p->left ; /* find first different bit */ for (i=1; i<=D && bit(i,key)==bit(i,p->k); i++); if (i>D) { Error /* Key already in table */; return(t); } else return( InsBetween( key, t, i ) ); } patricia InsBetween( key, t, i ) typekey key; patricia t; int i; {patricia p; if ( IsData(t) || i < t->level ) { /* create a new internal node */ p = NewDataNode( key ); return( bit(i,key) ? NewIntNode(i,t,p) : NewIntNode(i,p,t) ); } if (bit(t->level,key)==1) t->right = InsBetween( key, t->right, i ); else t->left = InsBetween( key, t->left, i ); return( t ); };

C source (3445.ins.c)



© Addison-Wesley Publishing Co. Inc.