經過遞歸算法完成樹的級聯勾選的通常思路

文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/前端

1.背景

在某個項目中,發現當tree上加上checkbox後,初始化該樹時會特別慢。現場樹上的節點最深有三層,節點個數總和有200多個。經排查,爲該tree的參數中開啓了級聯勾選的參數,致使初始化該樹時每初始化一個節點便進行了一次級聯判斷,如此效率太低致使。算法

如今將級聯勾選去除後,涉及到以下幾個問題須要解決:後端

初始化時,須要在前端或者後端完成級聯勾選邏輯。微信

  1. 手動勾選樹上節點後,須要進行級聯判斷。
  2. 點擊父節點時,子節點須要所有選中。
  3. 點擊子節點時,須要判斷父節點以及父組節點是否均需選中。

2.初始化時的後臺級聯選擇算法

在樹的數據初始化從後端讀取時,咱們能夠首先獲取到各子節點的選中狀態,所有獲取後,對構造出來的樹結構進行總體判斷是否進行父節點的勾選。其遞歸算法大體以下:3d

 

3.初始化後前端的級聯選擇算法(只討論勾選)

樹有兩種狀態,一種是勾選,一種是去勾選。這裏僅僅只考慮勾選的過程。去勾選過程的算法與勾選算法同樣。blog

當樹初始化完成後,勾選樹上任意節點時,須要完成以下兩個級聯判斷:遞歸

a.若是勾選的爲父節點,其全部子節點均需被勾選上,而且其父節點也要作級聯判斷。get

b.若是勾選的爲普通子節點,其父節點要作級聯判斷。博客

統一塊兒來就是,須要作兩個級聯算法,分別是向上方向判斷,和向下方向判斷:效率

             

3.1針對父節點的級聯算法

 

3.2針對子節點的級聯判斷

 

4.注意

遞歸算法中,遞歸層級(level)參數是個很是重要的參數,在控制操做邏輯上很是有用。

 

       

                                   -----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

                                                                                                       若是您以爲本文確實幫助了您,能夠微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                                                  

相關文章
相關標籤/搜索