求遍历树treeview的算法
使用递归,在函数本身里调用自己
这是我构造树用的递归方法,前提是要构造出第一层,此处省去构造第一层的代码
//wf_add_tree(integer ai_handle,string as_type_father_id)
//以下是用递归+datastore来实现树
//ai_handle为插入节点的handle,as_type_father_id为父节点的data(id)
Integer li_rows,li_i,li_handle,li_rtn
Boolean lb_sign
long ll_tvi,ll_handle
DataStore lds_1
TreeViewItem ltv_request /**/
lds_1 = Create DataStore
lds_1.DataObject = "d_xtwh_book_test" //检索参数为vc_type_father_id
//lds_1.DataObject = "d_xtwh_magazine_test"
lds_1.SetTransObject(sqlca)
lds_1.Reset()
li_Rows = lds_1.Retrieve(as_type_father_id)
If li_rows<=0 Then Return 1
//生成树
For li_i=1 To li_rows
ltv_request.pictureindex = 1
ltv_request.selectedpictureindex = 2
ltv_request.label=lds_1.Object.vc_type_name[li_i]
ltv_request.data =lds_1.object.vc_type_id[li_i]
li_handle=tv_1.InsertItemLast(ai_handle,ltv_request)
If li_handle<=0 Then
MessageBox(,插入树过程中出错!)
lb_sign=True
Exit
Else
lb_sign=False
End if
//进行递归生成树
li_rtn=wf_add_tree(li_handle,lds_1.object.vc_type_id[li_i])
If li_rtn =-1 Then
lb_sign=True
Exit
Else
lb_sign=False
Continue
End If
Next
If lb_sign=True Then
Return - 1 //插入失败
Else
Return 1 //插入成功
End If
Destroy lds_1
有个简单的办法,你创建一个datastore,两个字段,一个放data,一个放handle,在生成树的时候,插这个datastore,剩下的,想怎么弄就怎么弄啰。
根据问题的不同要求,才能确定采取不同的遍历方法,主要的方法有:先序遍历,中序遍历,后序遍历。不同的遍历方法对不同的问题有不同的效果。具体算法可参考一些数据结构的书。