社区
PowerBuilder
帖子详情
有兴趣的哥们儿来一起聊聊pb里的树的遍历问题
lovemindi
2000-12-13 04:31:00
我终于遇到了树的遍历,别人告诉我一个方法:
一层层的找出每一层的所有节点,存到数组或者数据存储中。但是,我不会。希望那位大哥能帮忙,顺手写两行代码。或者可以说说树的遍历还有没有其他的好办法。
只要有道理,就奉分。多谢了。
...全文
352
11
打赏
收藏
有兴趣的哥们儿来一起聊聊pb里的树的遍历问题
我终于遇到了树的遍历,别人告诉我一个方法: 一层层的找出每一层的所有节点,存到数组或者数据存储中。但是,我不会。希望那位大哥能帮忙,顺手写两行代码。或者可以说说树的遍历还有没有其他的好办法。 只要有道理,就奉分。多谢了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
viv_wangsc
2000-12-23
打赏
举报
回复
好了,给大家一个菜单遍历的源代码,希望能够让大家理解对于树的处理;
函数:f_ctrl_menu
参数:menu as_menu
返回:无
说明:在菜单的selected事件中定义了权限的控制规则
//逐级触发菜单的selected事件
as_menu.TriggerEvent(selected!)
int li_row
li_row = UpperBound(as_menu.item)
for li_row=1 to UpperBound(as_menu.item)
//递归调用函数本身处理子菜单,从而遍历整个菜单
f_ctrl_menu(as_menu.item[li_row])
next
viv_wangsc
2000-12-23
打赏
举报
回复
树的定义其实是递归定义的,也就是说树的孩子也是树或是一个空节点;
现实生活中比如说会计科目,层次性编码都属于树结构;
在处理树的时候如果要遍历,首先取出树的根节点,遍历根的孩子,同时,根的孩子也是一棵树,所以它可以调用同样的函数遍历它的孩子直到遍历完整棵树;
上面我写的代码就是基于这个思想,对于遍历菜单主要是用于权限控制,菜单也是树的结构,我很久以前做过,也是采用上面的方法递归从而遍历整棵树的;
datastore是用来检索一棵树的孩子的,对于每次函数调用都会创建一个datastore,当然菜单好象有一个submenu属性它的遍历就没有必要使用datastore了,不同的情况使用数组也可以,主要是在类似堆栈的结构保存它的所有孩子;
如果有什么具体的问题与想法请详细的告诉我,我会告诉你具体的做法;
God will bless you code;
blueswind
2000-12-22
打赏
举报
回复
看你要做的具体东西了, pb提供查找函数为何不用?!
对于没有函数的就的自己写了, 例如遍历菜单?!
而datastore 是在已经遍历之后才赋值的? 用来存储项目对应的数据用处?!
viv_wangsc
2000-12-21
打赏
举报
回复
首先建立一个根节点;
然后做一个数据储存(datastore)
该数据储存能够检索出一个节点的所有子节点;
然后使用对根节点调用函数wf_poplate_item,该函数有一个参数为节点句柄;
wf_poplate负责检索出所有子节点并插入节点入树并调用wf_poplate_item继续调用节点
然后在参数wf_poplate_item再递归调用即OK
//弹出树对应的所有孩子
treeviewitem ltvi_current
GetItem(handle,ltvi_current)
wf_poplate_item(ltvi_current)
lovemindi
2000-12-21
打赏
举报
回复
liguanyi 同志的办法是个好办法,但是恐怕当我们建树的时候都不愿意特地去另外做一个可有可无的数据窗口吧?反而还是romance_zhang同志的办法比较正统,但是!好像用这种递归的方法很容易发生“数据溢出”的错误,不是吗?
在pb中可以很简单的用函数
finditem(firstvisibletreeitem!,handle)
来找出所有的节点,可是这样做必须要把整棵树全部展开才可以。
请问:还有没有其他的更好的办法呢?
等下次我再一并给分吧!各位说的都有道理。
blueswind
2000-12-21
打赏
举报
回复
递归!
格利高里
2000-12-20
打赏
举报
回复
哈哈,太麻烦啦。我来说个好办法。
我用动态的TreeView的时候,都和一个DataWindow绑定在一起。
这个DataWindow有 handle、ItemData 、ItemText等几个列,
然后把TreeView的信息都保存到DataWindow里,把TreeView的
遍历、查找等都转换成了对DataWindow的查找。速度极快、非常
方便!高兴的话,你可以做一个通用Class出来。我倒是有一个
不过现在很少用PB了。
romance_zhang
2000-12-15
打赏
举报
回复
to kinist
你的方法虽然可行,但并非树的遍历的通用算法,对吗?而且在treeview中,你无法避免item焦点移动的问题.
盘谷
2000-12-15
打赏
举报
回复
数的每一个节点都有一个句柄(long型的数值),你可以得到最后一个节点的句柄last_handle,然后通过循环得到每个节点的句柄,想怎么样都可以!(提醒一点,这个数值是每个节点的绝对位置)
romance_zhang
2000-12-13
打赏
举报
回复
我认为在TreeView控件中查找特定的TreeViewItem就是一个简单的数的遍历问题:
下面的例子是在tv_1中统计data = as_parm的treeviewitem的个数,调用函数of_find()即可
// Public Subroutine of_find(String as_parm, ref Integer ai_num)
Long ll_root
ll_root = tv_1.FindItem(RootTreeItem!, 0)
Do While ll_root > 0
of_find_child(ll_root, as_parm, ai_num)
ll_root = tv_1.FindItem(NextTreeItem!, ll_root)
Loop
MessageBox('',ai_num)
// Private Function of_find_child(Long al_handle, String as_parm, ref Integer ai_num)
TreeViewItem ltvi_item
Long ll_handle
tv_1.GetItem(al_handle, ltvi_item)
IF ltvi_item.Data = as_parm Then
ai_num = ai_num + 1
End IF
ll_handle = ltvi_item.FindItem(ChildTreeItem!, al_handle)
Do While ll_handle > 0
of_find_child(ll_handle, as_parm, ai_num)
ll_handle = ltvi_item.FindItem(NextTreeItem! , ll_handle)
Loop
edong
2000-12-13
打赏
举报
回复
什么树?二叉树?
找本数据结构的书肯定有现成的算法。
深入体验C#项目开发(全部源代码及其附送源代码)
今天下载了一个哥们的深入体验C#项目开发全部源代码及其附送源代码下载了20次,才全部下载完毕。感觉着这哥们,分享精神可嘉,就是下载的时候有点麻烦。所以我借花献佛把全部源代码打包上传了。
各个公司面试题(百度、华为、中兴、烽火科技等)
本文件包括了国内外各大IT企业(百度、华为、中兴、烽火科技等)的面试题目,可供向往这些企业的哥们们提供些参考
XDOJ 363 输出快速排序递归算法隐含递归
树
的后序
遍历
序列 AC
XDOJ 输出快速排序递归算法隐含递归
树
的后序
遍历
序列 点进来吧,不骗你
二叉
树
的
遍历
在
一起
面试的对面那个哥们拿出教科书的启发下回来就翻了以前的课件,好好阅读了一番然后做如下总结,备忘! 二叉
树
的
遍历
是指从根结点出发,按照某种次序访问二叉
树
中的所有结点,使得每个结点被访问一次且仅被访问...
C语言
遍历
数组的几种方法总结
1、下标法 #include <stdio.h> void main(){ int nums[]={0,1,2,3,4,5,6,7,...2、指针
遍历
取值 示例代码如下: #include <stdio.h> void main(){ int nums[]={0,1,2,3,4,5,6,7,8,9}; int i; for(i
PowerBuilder
1,079
社区成员
66,439
社区内容
发帖
与我相关
我的任务
PowerBuilder
PowerBuilder 相关问题讨论
复制链接
扫一扫
分享
社区描述
PowerBuilder 相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章