Для создания или удаления GTree, используйте пару конструктор-деструктор, приведенную в списке функций 2..12. GCompareFunc аналогична функции сравнения "qsort()", описанной для GSList; в данном случае она используется для сравнения ключей в дереве.
GTree *g_tree_new(GCompareFunc key_compare_func)
void g_tree_destroy(GTree *tree)
Функции для манипулирования содержимым дерева показаны в списке функций 2..13. Все очень прямолинейно; "g_tree_insert()" перезаписывает любое существующее значение, поэтому будьте осторожны, если существующее значение является указателем на область выделенной памяти. Если "g_tree_lookup()" не может найти ключ, она возвращает NULL, иначе она возвращает связанное с ключом значение. И ключи, и значения имеют тип gpointer, но макросы "GPOINTER_TO_INT()" и "GPOINTER_TO_UINT()" позволяют вам использовать целые числа.
void g_tree_insert(GTree *tree, gpointer key,
gpointer value)
void g_tree_remove(GTree *tree, gpointer key)
gpointer g_tree_lookup(GTree *tree, gpointer key)
Существуют две функции, показанные в списке функций 2..14, которые дают вам информацию, насколько большим является дерево.
gint g_tree_nnodes(GTree *tree)
gint g_tree_height(GTree *tree)
Используя "g_tree_traverse()" (список функций 2..15),
вы можете проходить все дерево. Для ее использования вы должны обеспечить
GTraverseFunc, которой передается каждая пара
ключ-значение и аргумент data, который вы
передаете в "g_tree_traverse()". Прохождение дерева
продолжается до тех пор, пока GTraverseFunc возвращает
FALSE; если она возвращает TRUE,
прохождение прекращается. Вы можете использовать это для поиска значения в
дереве. Вот определение GTraverseFunc:
typedef gint (*GTraverseFunc) (gpointer key, gpointer value,
gpointer data);
GTraverseType - это перечисление; возможны 4 значения. Вот их смысл применительно к GTree.
void g_tree_traverse(GTree *tree, GTraverseFunc traverse_func,
GTraverseType traverse_type, gpointer data)