// 增,并返回该结点地址 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; }
void Map_init(Map* map) { BinarySearchTree_init((BinarySearchTree*) map); BinarySearchTree_setCompare((BinarySearchTree*) map, map, _pair_compare); map->compare = _default_compare; }