通過遞迴演算法完成樹的級聯勾選的一般思路

2022-01-22 07:05:40 字數 997 閱讀 5447

在某個專案中,發現當tree上加上checkbox後,初始化該樹時會特別慢。現場樹上的節點最深有三層,節點個數總和有200多個。經排查,為該tree的引數中開啟了級聯勾選的引數,導致初始化該樹時每初始化乙個節點便進行了一次級聯判斷,如此效率過低導致。

現在將級聯勾選去除後,涉及到如下幾個問題需要解決:

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

手動勾選樹上節點後,需要進行級聯判斷。

點選父節點時,子節點需要全部選中。

點選子節點時,需要判斷父節點以及父組節點是否均需選中。

在樹的資料初始化從後端讀取時,我們可以首先獲取到各子節點的選中狀態,全部獲取後,對構造出來的樹結構進行整體判斷是否進行父節點的勾選。其遞迴演算法大致如下:

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

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

a.如果勾選的為父節點,其所有子節點均需被勾選上,並且其父節點也要做級聯判斷。

b.如果勾選的為普通子節點,其父節點要做級聯判斷。

統一起來就是,需要做兩個級聯演算法,分別是向上方向判斷,和向下方向判斷:

遞迴演算法中,遞迴層級(level)引數是個非常重要的引數,在控制操作邏輯上非常有用。

樹的演算法思想之遞迴

遞迴 解題關鍵 找出遞迴關係 找出終止條件 確定返回值 例子 給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。演算法實現 int deep struct treenode p 遞迴關係 int left 1 deep p left int right 1 deep p right 確定返回值 retu...

遞迴樹求解遞迴演算法的時間複雜度

遞迴演算法時間複雜度的計算方程式乙個遞迴方程 在引入遞迴樹之前可以考慮乙個例子 t n 2t n 2 n2 迭代2次可以得 t n n2 2 2t n 4 n 2 2 還可以繼續迭代,將其完全展開可得 t n n2 2 n 2 2 2 n 22 2 2 n 23 2 2 n 24 2 2 n 2i ...

二叉樹的遞迴演算法

二叉樹是一種特殊的資料結構,有乙個根節點,根節點下面有一左一右兩個子節點,每個子節點又有各自的子節點,層層深入成樹狀。關於二叉樹的遍歷我只學習了遞迴遍歷,非遞迴遍歷比較複雜還是很理解。遞迴遍歷分為先序,中序和後序。用三個字母表示遞迴遍歷可以很好理解 d 訪問根節點,l 遍歷根節點的左子樹,r 遍歷根...