Пример #1
0
// 增,并返回该结点地址
BSTreeNode* BinarySearchTree_insert(BSTreeNode *tree, ElementType data)
{
	BSTreeNode* newNodePointer = NULL;
	BSTreeNode* parentNodePointer = NULL;

	if( !tree ) // 空树
	{
		return BinarySearchTree_init(data);
	}

	 // 已存在相同的数据则不再插入
	if ( (newNodePointer = BinarySearchTree_select(tree,data)) )
		return newNodePointer;

	newNodePointer = BinarySearchTree_init(data);
	while( tree ) //遍历直到叶子
	{
		parentNodePointer = tree;//保存父结点
		if( data < tree->data )
		{
			tree = tree->left;
		}else{
			tree = tree->right;
		}
	}
	
	if( data < parentNodePointer->data ) //插入
	{
		parentNodePointer->left = newNodePointer;
	}else{
		parentNodePointer->right = newNodePointer;
	}

	return newNodePointer;
}
Пример #2
0
void Map_init(Map* map)
{
    BinarySearchTree_init((BinarySearchTree*) map);
    BinarySearchTree_setCompare((BinarySearchTree*) map, map, _pair_compare);

    map->compare = _default_compare;
}