發(fā)文章
發(fā)文工具
撰寫(xiě)
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊(cè)
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
存儲(chǔ)一棵樹(shù)要考慮節(jié)點(diǎn)插入、刪除、聚合和將一棵樹(shù)加載到內(nèi)存。
插入:將節(jié)點(diǎn)加入到樹(shù)上;
刪除:將節(jié)點(diǎn)從樹(shù)上摘除;
聚合:將某個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn)(不遞歸子節(jié)點(diǎn))查找放在一起;
加載樹(shù):相當(dāng)于從根節(jié)點(diǎn)聚合。
方法一
這種方式如果辦公家具 -> 文具盒 -> 鉛筆,如果從辦公家具查找鉛筆,那么將需要遞歸
以節(jié)點(diǎn)為主鍵,其父節(jié)點(diǎn)為某一列值。create table tree(node, value, parentNode);
插入:insert into tree(node, value, parentNode);
刪除:刪除要做聚合操作后,才能delete from tree where node = xxx;(因?yàn)橐獎(jiǎng)h除這個(gè)節(jié)點(diǎn)下所有的子節(jié)點(diǎn))
聚合:如果要聚合某個(gè)節(jié)點(diǎn)A的所有子節(jié)點(diǎn),必須先查找出所有父節(jié)點(diǎn)為A的子節(jié)點(diǎn)
方法二
以節(jié)點(diǎn)為主鍵,其路徑列表為某一列值。(存在字段長(zhǎng)度問(wèn)題和不符合范式)
方法三
在路徑列表的設(shè)計(jì)中,關(guān)鍵字段的本質(zhì)是存儲(chǔ)了兩種信息,一是所有上級(jí)分類(lèi)的id,而是從頂級(jí)分類(lèi)到每個(gè)復(fù)分類(lèi)的距離;所以另增加一張表,含有三個(gè)字段(一個(gè)是所有上級(jí)分類(lèi)的id,二是本分類(lèi)的id,三是從頂級(jí)分類(lèi)到每個(gè)父分類(lèi)的距離).這樣這張表就能起到與path字段相同的作用,而且還不違反數(shù)據(jù)庫(kù)范式,最關(guān)鍵的是它不存在字段長(zhǎng)度的限制。這種方案也叫ClosureTable。
來(lái)自: hdzgx > 《電腦》
0條評(píng)論
發(fā)表
請(qǐng)遵守用戶(hù) 評(píng)論公約
js樹(shù)
easyui tree 節(jié)點(diǎn)選中
設(shè)置選中tree的節(jié)點(diǎn)。var node = $(''''''''#tt'''''''').tree(''''''''find''''...
jsTree獲取選中節(jié)點(diǎn)和選中指定節(jié)點(diǎn)
jsTree獲取選中節(jié)點(diǎn)和選中指定節(jié)點(diǎn)。$(''''''''#demo_tree'''''''').jstree({ "core" : { ''''''...
zTree獲取所有節(jié)點(diǎn)
zTree獲取所有節(jié)點(diǎn)。一般情況下,通過(guò)zTree官方API的方法獲取得到的是一個(gè)包含所有子節(jié)點(diǎn)的根節(jié)點(diǎn)(子節(jié)點(diǎn)都處于 children 屬性下)var treeObj = $.fn.zTree.getZTreeObj(“tree");var nodes = t...
JSF中Tree2組件使用方法-過(guò)兒oO -JavaEye技術(shù)社區(qū)
Tree2組件使用HTML表格將你的數(shù)據(jù)呈現(xiàn)為一個(gè)樹(shù)。樹(shù)的每個(gè)節(jié)點(diǎn)都包含了不少的HTML代碼(假定每個(gè)節(jié)點(diǎn)200個(gè)字符,這個(gè)大小將取決于你希望在節(jié)點(diǎn)上顯示的信息的量),這些信息將被傳送到瀏覽器,其中包括...
Ext 動(dòng)態(tài)加載樹(shù)
Ext 動(dòng)態(tài)加載樹(shù)var leftTree=new Ext.tree.TreePanel({id:"lefttree",title:"左側(cè)樹(shù)",loader:new Ext.tree.TreeLoader({dataUrl:""}),root:new Ext.tree.AsyncTreeNode...
ExtJS 4 樹(shù) – ExtJS4中文教程 | Show Framework
這個(gè)Tree Panel直接渲染在document.body上,我們定義了一個(gè)默認(rèn)展開(kāi)的根節(jié)點(diǎn),根節(jié)點(diǎn)有三個(gè)子節(jié)點(diǎn),前兩個(gè)子節(jié)點(diǎn)是葉子節(jié)點(diǎn),這意味著他...
讓JTree所有節(jié)點(diǎn)展開(kāi)和關(guān)閉的類(lèi) - 我愛(ài)看火影的日志 - 網(wǎng)易博客
讓JTree所有節(jié)點(diǎn)展開(kāi)和關(guān)閉的類(lèi) - 我愛(ài)看火影的日志 - 網(wǎng)易博客。import javax.swing.tree.public static void expandTree(JTree tree,boolean bo) { TreeNode root = (TreeNode) tree.getModel().get...
?LeetCode刷題實(shí)戰(zhàn)572:另一棵樹(shù)的子樹(shù)
class Solution {public: bool isSubtree(TreeNode* root, TreeNode* subRoot) { if(root==NULL||subRoot==NULL) ...
微信掃碼,在手機(jī)上查看選中內(nèi)容