VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

在TREEVIEW中,怎么统计出一个节点下所有子节点的数目(包括孙节

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
liangszpt



註冊時間: 2004-11-18
文章: 263
來自: な东省深圳市

第 1 樓

發表發表於: 星期三 三月 02, 2005 9:07 pm    文章主題: 在TREEVIEW中,怎么统计出一个节点下所有子节点的数目(包括孙节 引言回覆

现在有点一个节点A(不是根节点),下面有A1,A2,A3子节点,A1下面又有若干个子节点,A2下面又有若干个子节点,A3也是。

现在我想统计出节点A下,到底有多少个子节点(包括子节点的子节点)

请大家赐教
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2160


第 2 樓

發表發表於: 星期四 三月 03, 2005 1:00 am    文章主題: 引言回覆

*假設你有個TABLE檔名=mytable, 有2個欄位 parent_word , word
word是節點的代號, parent_word是它的上層節點代號
? '節點 A 總共有幾個子節點:',sumpoint('A')
****
func sumpoint
Lpara mparent

select word from mytable where parent_word=mparent into array a_word

mtotal=0
for i=1 to alen( a_word )
mtotal=mtotal + 1 + sumpoint( word )
next
return mtotal

**********************
如果你懂點程式的話, 你該知道我上面的程式少了二行指令,及一個地方有錯誤 , 請你自己動點腦筋, 在學校的老師都是先講架構, 細節部份須要學生自己想的, 總之學校作業是要自己完成的.

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.


garfield 在 星期四 三月 03, 2005 8:40 am 作了第 2 次修改
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
syntech



註冊時間: 2003-05-16
文章: 4249
來自: Taipei,Taiwan

第 3 樓

發表發表於: 星期四 三月 03, 2005 3:19 am    文章主題: 引言回覆

不禁讓我想到資料結構中的TRAVEL的"深度優先搜尋"
----------------------
深度優先搜尋(Depth First Search,DFS)
深度優先搜尋是先選擇任一個頂點v為起始點,然後一個頂點w作為新的起點再作深度優先搜尋,如此遞迴地進行,直到沒有相鄰的頂點或者所有的相鄰頂點都已被拜訪過,才回溯到上一層繼續進行深度優先搜尋其他尚未拜訪的頂點。

深度優先搜尋的順序將依所建立的圖形資料結構而定,因此在不同的結構下,即使起始點相同,產生的順序亦有所不同。

若採用相鄰矩陣來搜尋,那麼決定任一頂點v的所有相鄰頂點須O(n)的時間,若共需拜訪n個頂點,則所需時間為O(n2)。若採用相鄰串列方式,則串列每一個頂點只拜訪一次;因此,所需時間為O(e),e為邊(edge)的數目。

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
andy8m23



註冊時間: 2004-02-09
文章: 30
來自: 我娘的肚子,出來很久了

第 4 樓

發表發表於: 星期四 三月 03, 2005 4:46 pm    文章主題: 引言回覆

我是菜鳥....我仔細看了一下
a_word 好像是空的,要用Adir 是嗎,可是...有點不
敢問,adir好像只能把所在目錄放入,是不是要判斷以下有無節點再往下挖?

_________________
登入結束編譯檔<----會了 -->密碼管制鎖登入
新增修刪查列印<----功力尚淺 -->功能表單建群組
表格輸出轉換檔<----有點模糊 -->各式文檔互轉換
遠端資料共分享<----未來目標 -->多端連接資料庫
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2160


第 5 樓

發表發表於: 星期四 三月 03, 2005 5:11 pm    文章主題: 引言回覆

select ..... into array a_word
是將select 查到的資料放到 陣列, 而陣列的名稱就是 a_word , 而adir 是將目錄的檔案放到陣列中, 這兩個功能是不一樣的, 不要混為一談.

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
liangszpt



註冊時間: 2004-11-18
文章: 263
來自: な东省深圳市

第 6 樓

發表發表於: 星期日 三月 06, 2005 9:48 pm    文章主題: 引言回覆

Mytable的STRU如下:
FIELD TYPE
MenuID (N) 菜单ID
ParentID (N) 菜单的父ID
MenuLevel (C) 菜单层次,其中为“T”时,代表顶层菜单


FUNCTION NODESCOUNT()

PARA nMenuID &&就是你所选中的节点Id
LOCAL cParentString,nParentID,cParentID,cMenuLevel, nEndIndex

cParentString=""

SELE MENU
LOCA FOR MENU.Menu_id=nMenuID


&&先找到该节点的所有祖先ID,当MENUID和PARENTID相同时,代表已到了顶层。

DO WHILE MENU.Menu_id<>MENU.Parent_mid
cParentString=cParentString+"M"+ALLTRIM(STR(MENU.Parent_mid))+","
nParentID=MENU.Parent_mid
LOCA FOR MENU.Menu_id=nParentID
ENDDO
cParentString=cParentString+"M"+ALLTRIM(STR(MENU.Parent_mid))+","

nEndIndex=nMenuID+1
LOCA FOR MENU.Menu_id=nMenuID
cMenuLevel=ALLTRIM(MENU.Menu_Level)
SKIP

IF EOF()
RETURN nEndIndex
ENDIF

IF cMenuLevel="T"
DO WHILE !EOF()and ALLTRIM(MENU.Menu_Level)<>"T"
nEndIndex=nEndIndex+1
SKIP
ENDDO
ELSE
DO WHILE !EOF() AND ALLTRIM(MENU.Menu_Level)<>"T"
cParentID="M"+ALLTRIM(STR(MENU.Parent_mid))+","
IF cParentID$cParentString
EXIT
ENDIF
nEndIndex=nEndIndex+1
SKIP
ENDD
ENDIF
RETURN nEndIndex
&&其实所有的功能我是做在TREEVIEW里的,我还有一个变量是nBeginIndex,它的值就是你所选中的节点的INDEX值。
nEndindex-nBeginIndex就是该节点下的所有节点的数量(包括子节点的子节点。。)
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2160


第 7 樓

發表發表於: 星期一 三月 07, 2005 9:06 am    文章主題: 引言回覆

*****正確程式如下. 但沒有檢查這個類似TREEVIEW的結構是否有問題.
func sumpoint
Lpara mparent
local a_word[1] &&--定義成區域陣列
select MenuID from mytable where ParentID=mparent into array a_word
local mtotal,i &&--定義成區域變數才不會因遞廻呼叫而混淆.
mtotal=0
for i=1 to alen( a_word )
mtotal=mtotal + 1 + sumpoint( a_word[i] ) &&--用 sumpoint 來統計這個 a_word[i]有多少個字節點.
next
return mtotal

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作