在我的專案中,常常會用到樹形結構的資料,最為明顯的就是左邊選單欄,類似於window folder一樣的東西。
而我之前一直是借助前端封裝好的ztree等工具實現展示,而後台則通常使用遞迴進行資料的查詢。通常,我們在設計資料庫表的時候,一般會使用三個字段:id,name,pid。如下圖所示:
首先是建立實體類treeentity:
private string id;
private string name;
private string pid;
編寫實體類的get和set方法。
然後,我們通常會有以下的幾個方法(通常情況,封裝粒度不同,方法的實現個數和內容也不同):
public listfindallparents()} catch (sqlexception e) finally
return treelist;
}
public listfindchildbypid(string pid)} catch (sqlexception e) finally
return treelist;
}備註:這兩個方法可以合併,這裡是為了讓自己更好的理解,而寫了兩個方法。可以判斷傳入的pid的值,確定其查詢的是父節點,還是根據父節點查詢子節點。
最近,由於考試,看了資料結構 這本書。首先,我是在想,大家都用的這種方法,到底好在哪兒了,還有就是,為什麼在我們的資料庫設計中,樹的度的概念沒有體現出來。其次是,對於樹的遍歷,有非遞迴的方式,我想也許,我也可以不用遞迴,就實現樹形結構的資料查詢。於是乎,請看下文:
為什麼我不想用遞迴:
1,經過查證,系統使用遞迴演算法,需要系統堆疊處理。當樹的深度很大時,由於系統支撐不住,會呈現死亡狀態。
2,遞迴演算法的執行效率較低,無論是耗費的計算時間還是占用的儲存空間都比非遞迴演算法要多。
3,最為直接的原因:很長一段時間裡,我都不能理解遞迴演算法,我總在想,可不可以用我會的,我喜歡的 方式,去解決我面臨的問題?
遞迴的好處:
結構清晰,可讀性強,而且容易用數學歸納法來證明演算法的正確性,因此它為設計演算法、除錯程式帶來很大方便。
事實證明,對於樹結構的資料搜尋,完全可以不使用遞迴。我總算完成了我自己的夢想,終於,我可以不用遞迴,也可以實現樹結構的查詢了。更為高興的是,事實證明,採用非遞迴的方式,在我接觸到的專案中,它有更大的優勢。
**
遞迴迴圈獲得tree樹形結構資料
一 tree元件 二 資料分析 後台返回資料 id表示專案唯一性id depth表示層級 parentid表示父級id name表示節點名稱。三 資料處理 轉換資料結構,json轉化為樹形結構 methods 先找出第一層級,然後往裡追加資料 handledata arr dataarray.pus...
樹形結構資料的提交
樹形結構資料提交問題 1 標記,關聯工作在jsp中進行 基於樹形結構提交資料的複雜關聯問題乙個控制項的name,value無法包含所有關聯資訊,自身資訊,故用隱藏域,由於隱藏域是統統提交,所以用隱藏域value作為key,能獲取被選中值的就是被選中了,所以組織隱藏域和選擇框資料的時候按照key va...
樹形結構資料的提交
樹形結構資料提交問題 1 標記,關聯工作在jsp中進行 基於樹形結構提交資料的複雜關聯問題乙個控制項的name,value無法包含所有關聯資訊,自身資訊,故用隱藏域,由於隱藏域是統統提交,所以用隱藏域value作為key,能獲取被選中值的就是被選中了,所以組織隱藏域和選擇框資料的時候按照key va...