PB中TreeView控件的深度优化搜索算法程序

《计算机世界》2000年第11期B14版登载的“也谈‘在PB的TreeView控件中实现自动查询’” 一文中在实现对TreeView的搜索查询时,使用了两个数组来记录数据,然后通过查找数据元素来实现查询。而本文通过树的深度优先算法来实现TreeView的查询。 

---- 由于PB的TreeView控件没有提供查找项的功能,因此本程序算是对此一缺憾的补缺。 

---- 调用语法: 

---- findtreeitem(tv_tree, findby, data) 

---- 调用参数: 

tv_tree: TreeView, 指明在tv_tree树中查找 
findby: boolean, 指明查找方式 
false - 按标签(Label)查找 
true - 按附加数据(data)查找 
data: any, 指明要查找的内容 
返回值:long型。若找到,返回找到的项的Handle; 
若没有找到,返回0; 
若出错,返回-1 


---- 程序代码如下: 
public function long findtreeitem(TreeView tv_tree, 
boolean findby, any data); 

long ll_hdl[] 
integer li_cnt 
treeviewitem lt_tvi 

li_cnt = 1 
ll_hdl[1] = tv_tree.FindItem(RootTreeItem!, 0) 
do while li_cnt > 0 
if tv_tree.GetItem(ll_hdl[li_cnt], lt_tvi) 
= -1 then return -1 
if findby then 
if lt_tvi.data = data then 
return ll_hdl[li_cnt] 
end if 
else 
if lt_tvi.label = string(data) then 
return ll_hdl[li_cnt] 
end if 
end if 
if lt_tvi.children then 
li_cnt ++ 
ll_hdl[li_cnt] = tv_tree.FindItem( 
ChildTreeItem!, ll_hdl[li_cnt - 1]) 
else 
ll_hdl[li_cnt] = tv_tree.FindItem( 
NextTreeItem!, ll_hdl[li_cnt]) 
end if 
do while ll_hdl[li_cnt] <= 0 
li_cnt -- 
if li_cnt = 0 then exit 
ll_hdl[li_cnt] = tv_tree.FindItem( 
NextTreeItem!, ll_hdl[li_cnt]) 
loop 
loop 
return 0 

end function
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值