儲存樹形結構有很多種方式
1 儲存父的id
2 儲存樹的前序、中序、後序等關係
3 儲存左右節點的順序
第一種呢,資料儲存比較簡單,但是應用層構造樹的時候,會比較複雜,畢竟遞迴效能不好。
第二、三種插入節點的時候 計算節點的順序比較複雜
前幾天看到文章介紹儲存深度的方式,我覺得很靠譜。首先第一種方法構造樹的複雜是因為節點是無序的,可能遍歷的是子節點,此時根本找不到父節點。所以加入某種順序保證父節點先被遍歷就比較好辦了。對比2,3來說,樹的深度還是比較簡單的,插入的時候比較容易確定目錄的層級。
對我來說 不同的業務有不同的樹,啟動系統的時候 我會構造好加入到快取中。
簡單的表結構如下:
id:子節點id
parentid:父節點id
depth:子節點的深度
應用層訪問方式:
1. 資料庫中查詢出來。因為用的ibatis,沒法返回有序的hashmap,查詢返回按depth返回list,再轉成linkedhashmap。
2. 對map進行遍歷。掛載子節點到父類的節點中,注意物件用同乙個物件,節省記憶體。
樹和森林的儲存
一 樹的儲存方式 樹與二叉樹的不同之處在於,二叉樹規定了每個節點只有兩個或者兩個一下的孩子,並且兩個孩子之間有序,而樹則可以擁有多個孩子,但是各個孩子之間規定為無序。在儲存樹的時候有多種表示方法 1.雙親表示法 樹上所有的節點以及附加資訊適用乙個陣列來儲存。而陣列每個元素除了儲存樹上節點所包含的資訊...
樹 樹的定義和儲存結構
樹是一種非線性的資料結構,用來表示 一對多 的關係。樹是由唯一的根和若干棵互不相交的子樹組成。其中,當樹的結點數目為0時,這棵樹稱為一棵空樹。樹中的結點數等於所有結點的度數 1 度為 m 的樹中第 i 層上至多有 mi 1m mi 1 個結點高度為 h 的 m 叉樹至多有 mk 1 m 1 m k ...
樹和而叉查詢樹的實現
1.樹節點的典型宣告 typedef struct treenode ptrtonode struct treenode 2.而叉查詢樹的實現 include include struct treenode typedef struct treenode searchtree typedef str...