分享

GLIB库:GNODE高级

 217小月月坑 2015-02-15

宏列表:判断G n o d e的类型

#include <glib.h>

G_NODE_IS_ROOT ( node )

G_NODE_IS_LEAF ( node )

 

下面函数列表中的函数返回Gnode的一些有用信息,包括它的节点数、根节点、深度以及含有特定数据指针的节点。

其中的遍历类型GtraverseTypeGtree中介绍过。

下面是在Gnode中它的可能取值:

* G_IN_ORDER 先递归节点最左边的子树,并访问节点本身,然后递归节点子树的其他部分。

    这不是很有用,因为多数情况用于Gtree中。

* G_PRE_ORDER 访问当前节点,然后递归每一个子树。

* G_POST_ORDER 按序递归每个子树,然后访问当前节点。

* G_LEVEL_ORDER 首先访问节点本身,然后每个子树,然后子树的子树,然后子树的子树的子树,以次类推。

    也就是说,它先访问深度为0的节点,然后是深度为1,然后是深度为2,等等。

GNode的树遍历函数有一个GTraverseFlags参数。这是一个位域,用来改变遍历的种类。

当前仅有三个标志—只访问叶节点,非叶节点,或者所有节点:

* G_TRAVERSE_LEAFS 指仅遍历叶节点。

* G_TRAVERSE_NON_LEAFS 指仅遍历非叶节点。

* G_TRAVERSE_ALL 只是指( G_TRAVERSE_LEAFS | G_TRAVERSE_NON_LEAFS )快捷方式。

 

函数列表: 取得G N o d e属性

#include <glib.h>

guint g_node_n_nodes(GNode* root,GTraverseFlags flags)

GNode* g_node_get_root(GNode* node)

Gboolean g_node_is_ancestor(GNode* node,GNode* descendant)

Guint g_node_depth(GNode* node)

GNode* g_node_find(GNode* root,GTraverseType order,GTraverseFlags flags,gpointer data)

 

GNode有两个独有的函数类型定义:

typedef gboolean (*GNodeTraverseFunc) (GNode* node, gpointer data);

typedef void (*GNodeForeachFunc) (GNode* node, gpointer data);

这些函数调用以要访问的节点指针以及用户数据作为参数。GNodeTraverseFunc返回TRUE,停止任何正在进行的遍历,

 

这样就能将GnodeTraverseFuncg_node_traverse()结合起来按值搜索树。

 

函数列表: 访问GNode

#include <glib.h>

/ *Gnode进行遍历* /

void g_node_traverse( GNode* root,

                        GTraverseType order,

                        GTraverseFlags flags,

                        gint max_depth,

                        GNodeTraverseFunc func,

                        gpointer data )

/ *返回GNode的最大高度* /

guint g_node_max_height(GNode* root)

/ *Gnode的每个子节点调用一次f u n c函数* /

void g_node_children_foreach( GNode* node,

                                GTraverseFlags flags,

                                GNodeForeachFunc func,

                                gpointer data )

/ *颠倒node的子节点顺序* /

void g_node_reverse_children(GNode* node)

/ *返回节点node的子节点个数* /

guint g_node_n_children(GNode* node)

/ *返回node的第n个子节点* /

GNode* g_node_nth_child(GNode* node,guint n)

/ *返回node的最后一个子节点* /

GNode* g_node_last_child(GNode* node)

/ *node中查找值为d a t e的节点* /

GNode* g_node_find_child(GNode* node,GTraverseFlags flags,gpointer data)

/ *返回子节点childnode中的位置* /

gint g_node_child_position(GNode* node,GNode* child)

/ *返回数据datanode中的索引号* /

gint g_node_child_index(GNode* node,gpointer data)

/ *以子节点形式返回node的第一个兄弟节点* /

GNode* g_node_first_sibling(GNode* node)

/ *以子节点形式返回node的第一个兄弟节点* /

GNode* g_node_last_sibling(GNode* node)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多