打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
GLIB库:GNODE高级

宏列表:判断Gn 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 )快捷方式。

 

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

#include<glib.h>

guintg_node_n_nodes(GNode* root,GTraverseFlags flags)

GNode*g_node_get_root(GNode* node)

Gbooleang_node_is_ancestor(GNode* node,GNode* descendant)

Guintg_node_depth(GNode* node)

GNode*g_node_find(GNode* root,GTraverseType order,GTraverseFlagsflags,gpointer data)

 

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

typedefgboolean (*GNodeTraverseFunc) (GNode* node, gpointer data);

typedefvoid (*GNodeForeachFunc) (GNode* node, gpointer data);

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

 

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

 

函数列表:访问GNode

#include<glib.h>

/*Gnode进行遍历*/

voidg_node_traverse( GNode* root,

                       GTraverseTypeorder,

                       GTraverseFlagsflags,

                       gintmax_depth,

                       GNodeTraverseFuncfunc,

                       gpointerdata )

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

guintg_node_max_height(GNode* root)

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

voidg_node_children_foreach( GNode* node,

                               GTraverseFlagsflags,

                               GNodeForeachFuncfunc,

                               gpointerdata )

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

voidg_node_reverse_children(GNode* node)

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

guintg_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中查找值为da t e的节点*/

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

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

gintg_node_child_position(GNode* node,GNode* child)

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

gintg_node_child_index(GNode* node,gpointer data)

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

GNode*g_node_first_sibling(GNode* node)

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

GNode*g_node_last_sibling(GNode* node)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
linux 开发指南-3 - 磨练
Go 数据结构和算法篇(二):栈
Step By Step(Lua迭代器和泛型for)(转)
osgcallback程序注解及CallBack回调的介绍
二叉搜索树操作集锦
前端与编译原理:用 JS 写一个 JS 解释器
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服