

typedef struct NOIDEA_bintree
{
	int value;
	void * data;
	struct NOIDEA_bintree * left;
	struct NOIDEA_bintree * right;
}NOIDEA_bintree;

//we will take non rooted version
//order is taken at ptr data*

NOIDEA_bintree * NOIDEA_bintree_insert(NOIDEA_bintree * noidea_root, int noidea_value, void * noidea_data, void * noidea_ptr)
{
	if (noidea_ptr==0)
	{
		return 0;
	}
	NOIDEA_bintree * noidea_node = (NOIDEA_bintree*) noidea_ptr;
	noidea_node->value = noidea_value;
	noidea_node->data = noidea_data;
	noidea_node->left = 0;
	noidea_node->right = 0;
	if (noidea_root == 0)
	//case there no tree
	{
		return noidea_node;
	}
	NOIDEA_bintree * noidea_pivot = noidea_root;
	while(noidea_pivot!=0)
	/*a kind of infinite loop*/
	{
		if (noidea_pivot->value < noidea_value)
		{
			if( noidea_pivot->right == 0 )
			{
				noidea_pivot->right = noidea_node;
				return noidea_node;
			}
			else
			{
				noidea_pivot = noidea_pivot->right;
			}
		}
		if (noidea_pivot->value >= noidea_value)
		{
			if (noidea_pivot->left == 0)
			{
				noidea_pivot->left = noidea_node;
				return noidea_node;
			}
			else
			{
				noidea_pivot = noidea_pivot->left;
			}
		}
	}
	return noidea_node;
}

void * NOIDEA_bintree_search(NOIDEA_bintree * noidea_root, int noidea_value)
{
	if (noidea_root == 0)
	{
		return 0;
	}
	NOIDEA_bintree * noidea_pivot = noidea_root;
	
}

void * NOIDEA_bintree_delete(NOIDEA_bintree * noidea_root, int noidea_value)
{

}

int NOIDEA_bintree_lookup(NOIDEA_bintree * noidea_root, int noidea_value)
{

}

/*
size()
maxdepth()
minvalue()
printtree()
sameTree()
countTrees()
*/
