Why does this code insert a node into a binary search tree correctly? If I
only inserting going by first digit it works properly but when I try
inserting going by the whole ip and the port number the inserts are totally
out of order.
where
IPAddress is four ints
Node is an IPAddress, portNumber, left pointer and right pointer
Nodeptr is a pointer to a Node
Nodeptr add(Nodeptr tree, IPAddress ip, int portNumber)
{
if(tree==NULL)
{
if((tree = malloc(sizeof(N ode)))==NULL )
{
printf("No memory Left\n");
}
else
{
tree->address.digi t1 = ip.digit1;
tree->address.digi t2 = ip.digit2;
tree->address.digi t3 = ip.digit3;
tree->address.digi t4 = ip.digit4;
tree->portNo=portNum ber;
tree->left = tree->right = NULL;
}
}
else if(ip.digit1 < tree->address.digit1 )
{
tree->left = add(tree->left, ip,portNumber);
return tree;
}
else if(ip.digit1 >= tree->address.digit1 )
{
tree->right = add(tree->right,ip,portN umber);
return tree;
}
else if(ip.digit2 < tree->address.digit2 )
{
tree->left = add(tree->left, ip,portNumber);
return tree;
}
else if(ip.digit2 >= tree->address.digit2 )
{
tree->right = add(tree->right,ip,portN umber);
return tree;
}
else if(ip.digit3 < tree->address.digit3 )
{
tree->left = add(tree->left, ip,portNumber);
return tree;
}
else if(ip.digit3 >= tree->address.digit3 )
{
tree->right = add(tree->right,ip,portN umber);
return tree;
}
else if(ip.digit4 < tree->address.digit4 )
{
tree->left = add(tree->left, ip,portNumber);
return tree;
}
else if(ip.digit4 >= tree->address.digit4 )
{
tree->right = add(tree->right,ip,portN umber);
return tree;
}
else if(portNumber < tree->portNo)
{
tree->left = add(tree->left, ip,portNumber);
return tree;
}
else if(portNumber >= tree->portNo)
{
tree->right = add(tree->right,ip,portN umber);
return tree;
}
return tree;
}