Wednesday, July 22, 2009

Most efficient iterative Traversal of BST

lpFileList = Head;

if ( lpFileList != NULL )
{
while( lpFileList->Smaller != NULL )
{
lpFileList = lpFileList->Smaller;
}

do
{

// write anything for each node

***before any continue statement u must call this function
//lpFileList = ddrv_getFile( lpFileList );

//To Get next file
if ( lpFileList->Bigger != NULL )
{
lpFileList = lpFileList->Bigger;
while( lpFileList->Smaller != NULL )
{
lpFileList = lpFileList->Smaller;
}
}
else
{
while( lpFileList->Parent != NULL && lpFileList == lpFileList->Parent->Bigger )
{
lpFileList = lpFileList->Parent;
}
lpFileList = lpFileList->Parent;
}
}while ( lpFileList != NULL );
}






DEFRAGFILE * ddrv_getFile( DEFRAGFILE * apFileList )
{
if ( apFileList == NULL )
{
return NULL;
}

if ( apFileList->Bigger != NULL )
{
apFileList = apFileList->Bigger;
while( apFileList->Smaller != NULL )
{
apFileList = apFileList->Smaller;
}
}
else
{
while( apFileList->Parent != NULL && apFileList == apFileList->Parent->Bigger )
{
apFileList = apFileList->Parent;
}
apFileList = apFileList->Parent;
}

return apFileList;

}

No comments: