在glib中有两种不同的树:GTree是基本的平衡二叉树,它将存储按键值排序成对键值; GNode存储任意的树结构数据
,比如分析树或分类树。
函数列表:创建和销毁平衡二叉树 #include <glib.h> GTree* g_tree_new(GCompareFunc key_compare_func) void g_tree_destroy(GTree* tree)
函数列表: 操纵G t r e e数据 #include <glib.h> 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)
函数列表: 获得G Tr e e的大小 #include <glib.h> / *获得树的节点数* / gint g_tree_nnodes(GTree* tree) / *获得树的高度* / gint g_tree_height(GTree* tree)
使用g_tree_traverse()函数可以遍历整棵树。 要使用它,需要一个GtraverseFunc遍历函数,它用来给g_tree_trave rse()函数传递每一对键值对和数据参数。 只要GTraverseFunc返回FALSE,遍历继续;返回TRUE时,遍历停止。 可以用GTraverseFunc函数按值搜索整棵树。 以下是GTraverseFunc的定义: typedef gint (*GTraverseFunc)(gpointer key, gpointer value, gpointer data); G Tr a v e r s e Ty p e是枚举型,它有四种可能的值。下面是它们在G t r e e中各自的意思: * G_IN_ORDER (中序遍历)首先递归左子树节点(通过GCompareFunc比较后,较小的键),然后对当前节点的键值对调用
遍历函数,最后递归右子树。这种遍历方法是根据使用GCompareFunc函数从最小到最大遍历。 * G_PRE_ORDER (先序遍历)对当前节点的键值对调用遍历函数,然后递归左子树,最后递归右子树。 * G_POST_ORDER (后序遍历)先递归左子树,然后递归右子树,最后对当前节点的键值对调用遍历函数。 * G_LEVEL_ORDER (水平遍历)在GTree中不允许使用,只能用在Gnode中。
函数列表: 遍历GTree #include <glib.h> void g_tree_traverse( GTree* tree, GTraverseFunc traverse_func, GTraverseType traverse_type, gpointer data )
|
|