專利名稱:基于樹形數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)的插入的方法和存儲(chǔ)裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及存儲(chǔ)技術(shù)領(lǐng)域,特別涉及基于樹形數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)的插入的方 法和存儲(chǔ)裝置。
背景技術(shù):
樹形數(shù)據(jù)結(jié)構(gòu)中的樹由自然數(shù)個(gè)節(jié)點(diǎn)(Node )基于一定的關(guān)系結(jié)合構(gòu)成。 在任意一棵非空的樹中每個(gè)節(jié)點(diǎn)都具有用于唯一識(shí)別節(jié)點(diǎn)的關(guān)鍵碼值。在二 叉樹中上述關(guān)鍵碼值一般會(huì)用鍵(Key)來表示。
二叉樹是構(gòu)成樹的每個(gè)節(jié)點(diǎn)最多只能有兩個(gè)子節(jié)點(diǎn)的一種樹形數(shù)據(jù)結(jié) 構(gòu);在二叉樹中任取一個(gè)節(jié)點(diǎn)作為父節(jié)點(diǎn),為了區(qū)分當(dāng)前節(jié)點(diǎn)的兩個(gè)子節(jié)點(diǎn), 兩個(gè)子節(jié)點(diǎn)可以分別稱為父節(jié)點(diǎn)的左子節(jié)點(diǎn)和右子節(jié)點(diǎn),在二叉樹中所有的 節(jié)點(diǎn)與其子節(jié)點(diǎn)基于的關(guān)系可以是左子節(jié)點(diǎn)大于父節(jié)點(diǎn),父節(jié)點(diǎn)大于右子節(jié)點(diǎn)。
在二叉樹中插入節(jié)點(diǎn)的方法可以是將待插節(jié)點(diǎn)的關(guān)鍵碼值與二叉樹的 根節(jié)點(diǎn)的關(guān)鍵碼值比較,若待插節(jié)點(diǎn)的關(guān)鍵碼值小于根節(jié)點(diǎn)的關(guān)鍵碼值,則
進(jìn)入左子樹,否則進(jìn)入右子樹。在左子樹或右子樹里再將待插節(jié)點(diǎn)的關(guān)鍵:碼
值與子樹的根節(jié)點(diǎn)的關(guān)鍵碼值比較,如此進(jìn)行下去,直到把待插入點(diǎn)插入到 二叉樹里作為一個(gè)新的葉子節(jié)點(diǎn)。如果上述二叉樹的形狀是固定的(有時(shí)也 稱為樹的高度固定),上述4巴待插入點(diǎn)插入到二叉樹里作為一個(gè)新的葉子節(jié)點(diǎn)
可以理解為將待插節(jié)點(diǎn)插入到了一個(gè)虛擬的位置,然后對(duì)已經(jīng)存在的節(jié)點(diǎn) 和上述待插節(jié)點(diǎn)按照左子節(jié)點(diǎn)大于父節(jié)點(diǎn),父節(jié)點(diǎn)大于右子節(jié)點(diǎn)的關(guān)系進(jìn)行 搬移。
發(fā)明人在實(shí)現(xiàn)本發(fā)明的過程中發(fā)現(xiàn)在形狀固定的樹里,插入新的節(jié)點(diǎn) 需要對(duì)已經(jīng)存在的節(jié)點(diǎn)進(jìn)行搬移,需要搬移的節(jié)點(diǎn)的數(shù)量會(huì)隨著樹的高度成 指數(shù)增長,從而導(dǎo)致節(jié)點(diǎn)的插入時(shí)間迅速增加;現(xiàn)有樹形數(shù)據(jù)結(jié)構(gòu)中節(jié)點(diǎn)插 入的速度慢。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例要解決的技術(shù)問題是提供基于樹形數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)的插入的方法和存儲(chǔ)裝置,提高節(jié)點(diǎn)插入的速度。
為解決上述技術(shù)問題,本發(fā)明所提供的基于樹形數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)的插入方
法實(shí)施例可以通過以下技術(shù)方案實(shí)現(xiàn)
根據(jù)待插節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找最近主樹節(jié)點(diǎn),所述最近主樹節(jié) 點(diǎn)的關(guān)鍵碼值小于且最接近待插節(jié)點(diǎn)的關(guān)鍵碼值;所述主樹的根節(jié)點(diǎn)初始化 為具有最小的關(guān)鍵碼值;其中,所述主樹包括父節(jié)點(diǎn)、所述父節(jié)點(diǎn)的左子節(jié) 點(diǎn)和所述父節(jié)點(diǎn)的右子節(jié)點(diǎn),且所述左子節(jié)點(diǎn)大于所述父節(jié)點(diǎn),所述父節(jié)點(diǎn) 大于所述右子節(jié)點(diǎn);
以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從樹,判斷當(dāng)前從樹是 否已滿,
若是,則在當(dāng)前從樹中任意選擇一個(gè)節(jié)點(diǎn)作為拆分節(jié)點(diǎn),將拆分節(jié)點(diǎn)插 入到主樹中作為新建主樹節(jié)點(diǎn),為新建主樹節(jié)點(diǎn)分配新建從樹,并將新建主 樹節(jié)點(diǎn)的外部指針指向新建從樹,將當(dāng)前從樹中位于拆分節(jié)點(diǎn)左側(cè)的全部節(jié) 點(diǎn)搬移到新建從樹中,然后執(zhí)行查找最近主樹節(jié)點(diǎn),
若否,則將待插節(jié)點(diǎn)插入到當(dāng)前從樹中。
本發(fā)明實(shí)施例還提供了另 一種基于樹形數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)的插入方法,包括 根據(jù)待插節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找最近主樹節(jié)點(diǎn),所述最近主樹節(jié)
點(diǎn)的關(guān)鍵碼值大于且最接近待插節(jié)點(diǎn)的關(guān)鍵碼值;所述主樹的根節(jié)點(diǎn)初始化 為具有最大的關(guān)鍵碼值;所述主樹中的左子節(jié)點(diǎn)大于父節(jié)點(diǎn),父節(jié)點(diǎn)大于右 子節(jié)點(diǎn);
以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從樹,判斷當(dāng)前從樹是 否已滿,
若是,則在當(dāng)前從樹中任意選擇一個(gè)節(jié)點(diǎn)作為拆分節(jié)點(diǎn),將拆分節(jié)點(diǎn)插 入到主樹中作為新建主樹節(jié)點(diǎn),為新建主樹節(jié)點(diǎn)分配新建從樹,并將新建主 樹節(jié)點(diǎn)的外部指針指向新建從樹,將當(dāng)前從樹中位于拆分節(jié)點(diǎn)右側(cè)的全部節(jié) 點(diǎn)搬移到新建從樹中,然后執(zhí)行查找最近主樹節(jié)點(diǎn);
若否,則將待插節(jié)點(diǎn)插入到當(dāng)前從樹中。
本發(fā)明實(shí)施例還提供了 一種存儲(chǔ)裝置,包括
從樹存儲(chǔ)單元,用于存儲(chǔ)從樹;主樹存儲(chǔ)單元,用于存儲(chǔ)主樹,主樹中的節(jié)點(diǎn)具有指向從樹的外部指針。
本發(fā)明實(shí)施例還提供了一種通信設(shè)備,包括上述存儲(chǔ)裝置。 上述技術(shù)方案具有如下有益效果將樹形數(shù)據(jù)結(jié)構(gòu)的樹分成主樹和從樹
降低了樹的高度,減少了節(jié)點(diǎn)插入的時(shí)間,提高了節(jié)點(diǎn)的插入速度。
圖l為本發(fā)明實(shí)施例中樹形數(shù)據(jù)結(jié)構(gòu)示意圖; 圖2為現(xiàn)有技術(shù)中的多叉樹示意圖; 圖3為本發(fā)明實(shí)施例一節(jié)點(diǎn)插入的方法流程示意圖; 圖4為本發(fā)明實(shí)施例 一查找最近主樹節(jié)點(diǎn)的方法流程示意圖; 圖5為本發(fā)明實(shí)施例二節(jié)點(diǎn)查找的方法流程示意圖; 圖6為本發(fā)明實(shí)施例二查找最近主樹節(jié)點(diǎn)的方法流程示意圖; 圖7為本發(fā)明實(shí)施例三刪節(jié)點(diǎn)的方法流程示意圖; 圖8為本發(fā)明實(shí)施例四節(jié)點(diǎn)插入的方法流程示意圖; 圖9為本發(fā)明實(shí)施例四查找最近主樹節(jié)點(diǎn)的方法流程示意圖; 圖IO為本發(fā)明實(shí)施例五存儲(chǔ)裝置結(jié)構(gòu)示意圖; 圖11為本發(fā)明實(shí)施例六插入裝置的裝置結(jié)構(gòu)示意圖; 圖12為本發(fā)明實(shí)施例六的插入裝置加入平衡單元后的結(jié)構(gòu)示意圖; 圖13為本發(fā)明實(shí)施例七查找裝置結(jié)構(gòu)示意圖; 圖14為本發(fā)明實(shí)施例八刪除裝置結(jié)構(gòu)示意圖; 圖15為本發(fā)明實(shí)施例九合并裝置結(jié)構(gòu)示意圖; 圖16為本發(fā)明實(shí)施例十插入裝置結(jié)構(gòu)示意圖; 圖17為本發(fā)明實(shí)施例十二應(yīng)用環(huán)境的結(jié)構(gòu)示意圖; 圖18為本發(fā)明實(shí)施例十二現(xiàn)場可編程門陣列和存4諸器的結(jié)構(gòu)示意圖; 圖19為本發(fā)明實(shí)施例十二查找數(shù)據(jù)的方法流程示意圖; 圖20為本發(fā)明實(shí)施例十二更新數(shù)據(jù)的方法流程示意圖; 圖21為本發(fā)明實(shí)施例十二另 一更新數(shù)據(jù)的方法流程示意圖。
具體實(shí)施例方式
本發(fā)明實(shí)施例要解決的技術(shù)問題是提供一種基于樹形數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)的插 入的方法和存儲(chǔ)裝置,提高節(jié)點(diǎn)的插入的速度。在對(duì)本發(fā)明實(shí)施例進(jìn)行前對(duì)本發(fā)明實(shí)施例中,樹形數(shù)據(jù)結(jié)構(gòu)所使用的名 稱進(jìn)行一個(gè)說明,以二叉樹為例,如圖l所示,其中,圓可以表示為節(jié)點(diǎn),圓中的數(shù)字可以表示為節(jié)點(diǎn)的關(guān)鍵碼值;可以看到深度為BranchO、 Branch 1、 Branch 2的三層節(jié)點(diǎn)基于一定的關(guān)系(用實(shí)線示意)結(jié)合構(gòu)成一棵樹,稱為主 樹;深度為Branch3、 Branch 4的兩層節(jié)點(diǎn)基于一定的關(guān)系(用虛線示意)結(jié) 合構(gòu)成了7棵樹,每顆樹都可以稱為從樹;主樹中的節(jié)點(diǎn)具有指向與本節(jié)點(diǎn)對(duì) 應(yīng)的從樹的外部指針(用帶箭頭的線表示)。可以理解的是,上述主樹的高度、 從樹的高度、主樹中每個(gè)節(jié)點(diǎn)外部指針的數(shù)量、從樹的數(shù)量都是可以根據(jù)需 要存儲(chǔ)的數(shù)據(jù)規(guī)模等條件來設(shè)定,圖l不應(yīng)理解為對(duì)本發(fā)明實(shí)施例的限定。另 外,在后續(xù)實(shí)施例的說明中無特別說明,稱節(jié)點(diǎn)大或小均指關(guān)鍵碼值大或??; 在本發(fā)明實(shí)施例中,主樹和從樹的高度設(shè)定后,數(shù)據(jù)的插入刪除等操作不改 變主樹和從樹能夠具有的最大高度;本發(fā)明實(shí)施例中的樹形數(shù)據(jù)結(jié)構(gòu)是有序樹形數(shù)據(jù)結(jié)構(gòu),為方便說明在本 發(fā)明實(shí)施例中將左定義為大的一側(cè),右定義為小的一側(cè),可以理解的是左和 右是一個(gè)相對(duì)的概念,左和右僅表示大小關(guān)系不應(yīng)理解為對(duì)本發(fā)明實(shí)施例的 限定,可以從主樹中看到根據(jù)這樣的大小關(guān)系建立的樹形結(jié)構(gòu)中,任選一個(gè) 節(jié)點(diǎn)其左側(cè)的節(jié)點(diǎn)都大于該節(jié)點(diǎn),右側(cè)的節(jié)點(diǎn)都小于該節(jié)點(diǎn);另外對(duì)樹形數(shù)據(jù)結(jié)構(gòu)中的一些概念進(jìn)行簡單的介紹,如圖l所示,以主樹為例節(jié)點(diǎn)16在主樹中沒有上層節(jié)點(diǎn),節(jié)點(diǎn)30在從樹中沒有上層節(jié)點(diǎn),可以稱 節(jié)點(diǎn)16為主樹的根節(jié)點(diǎn),節(jié)點(diǎn)30為節(jié)點(diǎn)30所在從樹的根節(jié)點(diǎn);與節(jié)點(diǎn)24有直接聯(lián)系的上層節(jié)點(diǎn)(節(jié)點(diǎn)16)為節(jié)點(diǎn)24的父節(jié)點(diǎn),節(jié)點(diǎn)24 則為節(jié)點(diǎn)16的子節(jié)點(diǎn),可以看到節(jié)點(diǎn)8也是節(jié)點(diǎn)16的子節(jié)點(diǎn),為了區(qū)分節(jié)點(diǎn)24 和節(jié)點(diǎn)8,可以稱節(jié)點(diǎn)24為節(jié)點(diǎn)16的左子節(jié)點(diǎn),節(jié)點(diǎn)8為節(jié)點(diǎn)16的右子節(jié)點(diǎn); 另外,具有父子關(guān)系的節(jié)點(diǎn)在邏輯上是相鄰的,稱為相鄰節(jié)點(diǎn);可以看到左子節(jié)點(diǎn)、右子節(jié)點(diǎn)還可以有自己的子節(jié)點(diǎn),所有的子節(jié)點(diǎn) 可以稱為節(jié)點(diǎn)16的子孫;節(jié)點(diǎn)16的左子節(jié)點(diǎn)(節(jié)點(diǎn)24)和節(jié)點(diǎn)24的子孫,也 是樹形的結(jié)構(gòu),可以稱為節(jié)點(diǎn)16的左子樹,同理右子節(jié)點(diǎn)(節(jié)點(diǎn)8)和節(jié)點(diǎn)8 的子孫,可以稱為節(jié)點(diǎn)16的右子樹;節(jié)點(diǎn)28、節(jié)點(diǎn)20等節(jié)點(diǎn)在主樹中沒有子節(jié)點(diǎn),可以稱為主樹的葉子節(jié)點(diǎn)。 如圖2所示,為一4果多叉樹,可以看到深度為BranchO、 Branch l的兩層節(jié) 點(diǎn)基于一定的關(guān)系(用實(shí)線示意)構(gòu)成多叉樹,與二叉樹類似,不同點(diǎn)在于 多叉樹中每個(gè)節(jié)點(diǎn)可以有多個(gè)子節(jié)點(diǎn);在多叉樹中取一個(gè)節(jié)點(diǎn)(節(jié)點(diǎn)16)作 為當(dāng)前節(jié)點(diǎn),參考二叉樹,可以將當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)分為左子節(jié)點(diǎn)(虛線的 左邊)和右子節(jié)點(diǎn)(虛線右邊);與二叉樹不同的是這時(shí)左子節(jié)點(diǎn)和右子節(jié) 點(diǎn)都可以有多個(gè),當(dāng)前節(jié)點(diǎn)與其子節(jié)點(diǎn)的關(guān)系依然可以參考二叉樹左子節(jié) 點(diǎn)大于當(dāng)前節(jié)點(diǎn),當(dāng)前節(jié)點(diǎn)大于右子節(jié)點(diǎn);另外,在多個(gè)左子節(jié)點(diǎn)和多個(gè)右 子節(jié)點(diǎn)也可以按照一定的順序進(jìn)行排序,圖2中從左到右排序依據(jù)從大到小的 原則進(jìn)行(圖2中左子節(jié)點(diǎn)排序依次為節(jié)點(diǎn)32、節(jié)點(diǎn)31、節(jié)點(diǎn)29、節(jié)點(diǎn)27,右 子節(jié)點(diǎn)排序依次為節(jié)點(diǎn)23、節(jié)點(diǎn)21、節(jié)點(diǎn)19、節(jié)點(diǎn)8),當(dāng)然也可以從小到大 排序??梢岳斫獾氖窃诙嗖鏄涔?jié)點(diǎn)的插入、查找、刪除都是可以參考二叉樹 進(jìn)行的,在本發(fā)明實(shí)施例的說明中均以二叉樹為例,可以理解的是,二叉樹 不應(yīng)理解為對(duì)本發(fā)明實(shí)施例的限定,本發(fā)明實(shí)施例中所述的樹也可以是多叉 樹。實(shí)施例一,如圖3所示,本發(fā)明實(shí)施例提供了一種基于樹形數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn) 的插入方法,包括以下步驟步驟301:根據(jù)待插節(jié)點(diǎn)的關(guān)4t碼值在主樹中查找最近主樹節(jié)點(diǎn),上述最 近主樹節(jié)點(diǎn)的關(guān)鍵碼值小于且最接近于待插節(jié)點(diǎn)的關(guān)鍵碼值;上述主樹的根 節(jié)點(diǎn)初始化為具有最小的關(guān)鍵碼值;其中,上述主樹包括父節(jié)點(diǎn)、上述父節(jié) 點(diǎn)的左子節(jié)點(diǎn)和上述父節(jié)點(diǎn)的右子節(jié)點(diǎn),且上述左子節(jié)點(diǎn)大于上述父節(jié)點(diǎn), 上述父節(jié)點(diǎn)大于上述右子節(jié)點(diǎn)在一棵樹中,插入的節(jié)點(diǎn)的關(guān)鍵碼值會(huì)在一個(gè)數(shù)域內(nèi)取值,上述最小關(guān) 鍵碼值可以是上述數(shù)域中最小的數(shù),也可以是小于上述數(shù)域中的所有數(shù)的任 意值;上述查找最近主樹節(jié)點(diǎn)的方法是在主樹中查找關(guān)鍵碼值小于且最接近 于待插節(jié)點(diǎn)的關(guān)鍵碼值的節(jié)點(diǎn);后續(xù)實(shí)施例中將給出一種查找最近主樹節(jié)點(diǎn) 的實(shí)現(xiàn)方式;步驟302:以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從樹;步驟303:判斷當(dāng)前從樹是否已滿,若是,則進(jìn)入步驟304,若否則進(jìn)入 步驟305;上述當(dāng)前從樹是否已滿,可以是上述當(dāng)前從樹的使用率是否達(dá)到設(shè)定 的使用率,若是,則確定上述當(dāng)前從樹已滿,若否,則確定上述當(dāng)前從樹未 滿;也可以是上述當(dāng)前從樹是否已經(jīng)沒有空節(jié)點(diǎn)了,若是,則確定當(dāng)前從 樹已滿,若否,則確定當(dāng)前從樹未滿。步驟304:在當(dāng)前從樹中任意選擇一個(gè)節(jié)點(diǎn)作為拆分節(jié)點(diǎn),將拆分節(jié)點(diǎn)插 入到主樹中作為新建主樹節(jié)點(diǎn),為新建主樹節(jié)點(diǎn)分配新建從樹,并將新建主 樹節(jié)點(diǎn)的外部指針指向新建從樹,將當(dāng)前從樹中位于拆分節(jié)點(diǎn)左側(cè)的全部節(jié) 點(diǎn)搬移到新建從樹中,然后進(jìn)入步驟301;步驟305:將待插節(jié)點(diǎn)插入到當(dāng)前從樹中。本發(fā)明實(shí)施例所述的插入方法保證了從樹的高度不會(huì)隨著數(shù)據(jù)的插入過 度增長,從而減少了后續(xù)節(jié)點(diǎn)插入的時(shí)間,提高了節(jié)點(diǎn)的插入速度。具體地,如圖4所示,本發(fā)明實(shí)施例給出了上述根據(jù)待插節(jié)點(diǎn)的關(guān)鍵碼值 在主樹中查找最近主樹節(jié)點(diǎn),以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng) 前從樹的一種實(shí)現(xiàn)方式,以二叉樹為例,包括讀取主樹根節(jié)點(diǎn)的外部指針,設(shè)置變量為上述主樹根節(jié)點(diǎn)的外部指針, 將上述根節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn);判斷待插節(jié)點(diǎn)關(guān)鍵碼值是否大于上述主樹節(jié)點(diǎn)的關(guān)鍵碼值,設(shè)置上述變 量為上述主樹節(jié)點(diǎn)的左子節(jié)點(diǎn)的外部指針,將上述左子節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn), 若否,將上述當(dāng)前節(jié)點(diǎn)的右子節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn);判斷當(dāng)前節(jié)點(diǎn)是否為葉子節(jié)點(diǎn),若是,以上述變量指向的從樹作為當(dāng)前 從樹。上述實(shí)施方式,還還可以包括判斷當(dāng)前節(jié)點(diǎn)是否為空或無效,若是,以上述變量指向的從樹作為當(dāng)前 從樹。具體還可以包括以下步驟步驟401:讀取主樹根節(jié)點(diǎn)的外部指針,設(shè)置變量為上述主樹根節(jié)點(diǎn)的外 部指針,將上述主樹根節(jié)點(diǎn)作為當(dāng)前主樹節(jié)點(diǎn);假設(shè)上述變量用Pointer表示,則可以為Pointer =主樹根節(jié)點(diǎn)的外部指針; 步驟402:判斷當(dāng)前主樹節(jié)點(diǎn)是否為空或無效,若是,進(jìn)入步驟403,若 否,進(jìn)入步驟404;步驟403:以上述變量指向的從樹作為當(dāng)前從樹;步驟404:判斷待插節(jié)點(diǎn)關(guān)鍵碼值是否大于上述當(dāng)前主樹節(jié)點(diǎn)的關(guān)鍵碼 值,若是,進(jìn)入步驟405,若否,進(jìn)入步驟406;步驟405:設(shè)置上述變量為上述當(dāng)前主樹節(jié)點(diǎn)的左子節(jié)點(diǎn)的外部指針(可 以表示為PointeF左子節(jié)點(diǎn)的外部指針),將上述左子節(jié)點(diǎn)作為當(dāng)前主樹節(jié) 點(diǎn),進(jìn)入步驟407;若這里的樹為多叉樹,那么上述設(shè)置上述變量為上述當(dāng)前主樹節(jié)點(diǎn)的左 子節(jié)點(diǎn)的外部指針之前還包括查找當(dāng)前主樹節(jié)點(diǎn)的左子節(jié)點(diǎn)中小于且最接 近于待查節(jié)點(diǎn)的節(jié)點(diǎn),然后設(shè)置上述變量為上述查找到的主樹節(jié)點(diǎn)的左子節(jié) 點(diǎn)。 -步驟406:將上述當(dāng)前主樹節(jié)點(diǎn)的右子節(jié)點(diǎn)作為當(dāng)前主樹節(jié)點(diǎn)(此時(shí)Pointer 沒有改變),進(jìn)入步驟407。若這里的樹為多叉樹,那么上述將當(dāng)前主樹節(jié)點(diǎn)的右子節(jié)點(diǎn)作為當(dāng)前主 樹節(jié)點(diǎn)之前還包括查找上述當(dāng)前主樹節(jié)點(diǎn)的右子節(jié)點(diǎn)鐘小于且最接近于待 查節(jié)點(diǎn)的節(jié)點(diǎn),然后將上述查找到的當(dāng)前主樹節(jié)點(diǎn)的右子節(jié)點(diǎn)作為當(dāng)前主樹 節(jié)點(diǎn)。步驟407:判斷上述當(dāng)前主樹節(jié)點(diǎn)是否為上述當(dāng)前主樹節(jié)點(diǎn)所在的主樹的 葉子節(jié)點(diǎn);若是,進(jìn)入步驟403;若否,進(jìn)入步驟402;上述實(shí)施方式提供了根據(jù)待插節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找最近主樹節(jié) 點(diǎn),以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從樹的一種實(shí)現(xiàn)方式, 可以理解的是實(shí)現(xiàn)的方案還有很多,上述舉例不應(yīng)理解為實(shí)現(xiàn)方案的窮舉, 故上述實(shí)施方式不應(yīng)理解為對(duì)本發(fā)明實(shí)施例的限定。進(jìn)一步地,還可以對(duì)主樹進(jìn)行平衡才喿作;經(jīng)平tf操作后主樹的有效節(jié)點(diǎn) 在主樹中具有最小的深度。具體地,觸發(fā)對(duì)主樹進(jìn)行平衡操作的條件可以是在上述主樹的某一深 度的節(jié)點(diǎn)處于未滿狀態(tài),且上述某一深度非上述主樹的最下層時(shí),執(zhí)行對(duì)主樹進(jìn)行平衡操作;或在最下層節(jié)點(diǎn)以上的各深度節(jié)點(diǎn)中,為空的數(shù)量達(dá)到設(shè)定值時(shí),執(zhí)行對(duì) 主樹進(jìn)行平衡操作??梢岳斫獾氖怯|發(fā)對(duì)主樹進(jìn)行平衡的條件還可以有很多,例如還可以 是在存儲(chǔ)系統(tǒng)處于閑置狀態(tài)時(shí)對(duì)主樹進(jìn)行平衡操作;故上述兩種舉例不應(yīng)理 解為對(duì)本發(fā)明實(shí)施例的限定。上述實(shí)施方式通過對(duì)主樹進(jìn)行平衡操作可以降低主樹的高度,從而進(jìn)一 步提高插入速度。實(shí)施例二,如圖5所示,本發(fā)明實(shí)施例還提供了一種基于樹形數(shù)據(jù)結(jié)構(gòu)節(jié) 點(diǎn)的查找方法,可以包括以下步驟步驟501:根據(jù)待查節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找待查找節(jié)點(diǎn);若主樹中 不存在上述待查節(jié)點(diǎn),則查找最近主樹節(jié)點(diǎn);上述最近主樹節(jié)點(diǎn)的關(guān)鍵碼值 'J 、于且最接近待插節(jié)點(diǎn)的關(guān)鍵碼值;若主樹中存在節(jié)點(diǎn)與待查節(jié)點(diǎn)具有相同的關(guān)鍵碼值,這時(shí)就已經(jīng)找到了 待查找節(jié)點(diǎn),查找流程可以結(jié)束;步驟502:以上述最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從樹;步驟503:在上述當(dāng)前從樹中查找上述待查找節(jié)點(diǎn)。上述查找的實(shí)現(xiàn)方式中,由于降低了樹的高度,節(jié)點(diǎn)的查找速度也會(huì)決。具體地,如圖6所示,本發(fā)明實(shí)施例給出了上述才艮據(jù)待查節(jié)點(diǎn)的關(guān)4定碼值 在主樹中查找最近主樹節(jié)點(diǎn),以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng) 前從樹的一種實(shí)現(xiàn)方式,以二叉樹為例,包括以下步驟步驟601:讀取主樹根節(jié)點(diǎn)的外部指針,設(shè)置變量為上述主樹根節(jié)點(diǎn)的外 部指針,將上述主樹根節(jié)點(diǎn)作為當(dāng)前主樹節(jié)點(diǎn);假設(shè)上述變量用Pointer表示,則可以為Pointer =主樹根節(jié)點(diǎn)的外部指針;步驟602:判斷當(dāng)前主樹節(jié)點(diǎn)是否為空或無效,若是,進(jìn)入步驟603,若 否,進(jìn)入步驟604;步驟603:以當(dāng)前變量指向的從樹作為當(dāng)前從樹;步驟604:判斷待查節(jié)點(diǎn)關(guān)鍵碼值是否大于上述當(dāng)前主樹節(jié)點(diǎn)的關(guān)鍵碼 值,若是,進(jìn)入步驟605,若否,進(jìn)入步驟606;步驟605:設(shè)置上述變量為上述當(dāng)前主樹節(jié)點(diǎn)的左子節(jié)點(diǎn)的外部指針(可 以表示為Pointe產(chǎn)左子節(jié)點(diǎn)的外部指針),將上述左子節(jié)點(diǎn)作為當(dāng)前主樹節(jié) 點(diǎn),進(jìn)入步驟607;步驟606:將上述當(dāng)前主樹節(jié)點(diǎn)的右子節(jié)點(diǎn)作為當(dāng)前主樹節(jié)點(diǎn)(此時(shí)Pointer 沒有改變),進(jìn)入步驟607。步驟607:判斷上述當(dāng)前主樹節(jié)點(diǎn)是否為上述當(dāng)前主樹節(jié)點(diǎn)所在的主樹的 葉子節(jié)點(diǎn);若是,進(jìn)入步驟603;若否,進(jìn)入步驟602;上述實(shí)施方式提供了才艮據(jù)待查節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找最近主樹節(jié) 點(diǎn),以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從樹的一種實(shí)現(xiàn)方式, 可以理解的是實(shí)現(xiàn)的方案還有很多,上述舉例不應(yīng)理解為實(shí)現(xiàn)方案的窮舉, 故上述實(shí)施方式不應(yīng)理解為對(duì)本發(fā)明實(shí)施例的限定。實(shí)施例三,如圖7所示,本發(fā)明實(shí)施例還提供了一種基于樹形數(shù)據(jù)結(jié)構(gòu)節(jié) 點(diǎn)的刪除方法,可以包括以下步驟步驟701:根據(jù)待刪節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找待刪節(jié)點(diǎn),若主樹中不 存在上述待刪節(jié)點(diǎn),則查找最近主樹節(jié)點(diǎn);上述最近主樹節(jié)點(diǎn)的關(guān)4定碼值小 于且最接近待刪節(jié)點(diǎn)的關(guān)鍵碼值;若主樹中存在節(jié)點(diǎn)與待刪節(jié)點(diǎn)具有相同的關(guān)鍵碼值,這時(shí)就已經(jīng)找到了 待刪節(jié)點(diǎn),可以直接進(jìn)入步驟704;步驟702:以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從樹;步驟703:在上述當(dāng)前從樹中查找上述待刪節(jié)點(diǎn);步驟704:刪除上述查找到的待刪節(jié)點(diǎn)??梢钥吹?,本實(shí)施例的實(shí)現(xiàn)方法可以在實(shí)施例二的基礎(chǔ)上進(jìn)行,首先查 找待刪節(jié)點(diǎn),然后刪除待刪節(jié)點(diǎn)。若刪除的節(jié)點(diǎn)為主樹節(jié)點(diǎn)時(shí),可以對(duì)主樹 節(jié)點(diǎn)指向的從樹節(jié)點(diǎn)和下層節(jié)點(diǎn)進(jìn)行重新排序,排序的過程可以是將這些節(jié) 點(diǎn)重新插入;若刪除的節(jié)點(diǎn)為從樹的節(jié)點(diǎn),則可以對(duì)該乂人樹的節(jié)點(diǎn)進(jìn)行排序。上述實(shí)施例中,由于樹的高度降低了,能夠更快地查找到待刪節(jié)點(diǎn),從 而加快了刪除節(jié)點(diǎn)的速度。進(jìn)一步地,樹中的節(jié)點(diǎn)被刪除后會(huì)出現(xiàn)一些未滿的樹,還可以進(jìn)行樹的 合并操作,具體可以為主樹中的第一正整數(shù)個(gè)相鄰的節(jié)點(diǎn)指向的從樹中的有效節(jié)點(diǎn)數(shù),小于第
二正整數(shù)個(gè)從樹能夠容納的節(jié)點(diǎn)數(shù)時(shí)(上述第一正整數(shù)大于第二正整數(shù))
將上述主樹中的第一正整數(shù)個(gè)相鄰節(jié)點(diǎn),及上述第一正整數(shù)個(gè)節(jié)點(diǎn)分別
指向的從樹,合并為第二正整數(shù)個(gè)主樹節(jié)點(diǎn),以及與上述第二正整數(shù)個(gè)主 樹節(jié)點(diǎn)指向的從樹。
舉例說明,假設(shè)上述第一正整數(shù)為2,上述第二正整數(shù)為l則
當(dāng)主樹中兩個(gè)相鄰的節(jié)點(diǎn)指向的從樹中的有效節(jié)點(diǎn)數(shù),小于一個(gè)從樹能 夠容納的節(jié)點(diǎn)數(shù)時(shí);
將上述主樹中,兩個(gè)相鄰節(jié)點(diǎn)中較大的主樹節(jié)點(diǎn),及其指向的從樹中的 有效節(jié)點(diǎn),插入上述兩個(gè)相鄰節(jié)點(diǎn)中較'』、的主樹節(jié)點(diǎn)指向的從樹中。
可以理解的是,上述對(duì)樹的合并過程是可以為將需要合并的主樹節(jié)點(diǎn), 以及上述主樹節(jié)點(diǎn)指向的從樹的有效節(jié)點(diǎn),再次插入本發(fā)明實(shí)施例的樹形數(shù) 據(jù)結(jié)構(gòu)中的過程。另外觸發(fā)進(jìn)行樹的合并的條件可以有很多種,例如還可以 是在存儲(chǔ)系統(tǒng)處于閑置狀態(tài)時(shí)進(jìn)行,可以理解的是上述觸發(fā)進(jìn)行樹的合并的 條件的舉例不應(yīng)理解為對(duì)本發(fā)明實(shí)施例的限定。
上述實(shí)施例中通過合并處于未滿狀態(tài)的從樹可以釋放出一些存儲(chǔ)資源, 可以^提高存儲(chǔ)空間的利用率。
實(shí)施例四,如圖8所示,本發(fā)明實(shí)施例還提供了另一種樹形數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn) 插入的方法,可以包括以下步驟
步驟801:才艮據(jù)待插節(jié)點(diǎn)的關(guān)鍵:碼值在主樹中查找最近的主樹節(jié)點(diǎn),上述 最近的主樹節(jié)點(diǎn)的關(guān)鍵碼值大于且最接近于待插節(jié)點(diǎn)的關(guān)鍵碼值;上述主樹 的根節(jié)點(diǎn)初始化為具有最大的關(guān)鍵碼值;其中,上述主樹包括父節(jié)點(diǎn)、上述 父節(jié)點(diǎn)的左子節(jié)點(diǎn)和上述父節(jié)點(diǎn)的右子節(jié)點(diǎn),且上述左子節(jié)點(diǎn)大于上述父節(jié) 點(diǎn),上述父節(jié)點(diǎn)大于上述右子節(jié)點(diǎn)
在一棵樹中,插入的節(jié)點(diǎn)的關(guān)鍵碼值會(huì)在一個(gè)數(shù)域內(nèi)取值,上述最大關(guān) 鍵碼值可以是上述數(shù)域中最大的數(shù),也可以是大于上述數(shù)域中的所有數(shù)的任 意值;
步驟802:以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從樹; 步驟803:判斷當(dāng)前從樹是否已滿,若是,則進(jìn)入步驟804,若否,則進(jìn)入步驟805;
步驟804:在當(dāng)前從樹中任意選擇一個(gè)節(jié)點(diǎn)作為拆分節(jié)點(diǎn),將拆分節(jié)點(diǎn)插 入到主樹中作為新建主樹節(jié)點(diǎn),為新建主樹節(jié)點(diǎn)分配新建從樹,并將新建主 樹節(jié)點(diǎn)的外部指針指向新建從樹,將當(dāng)前從樹中位于拆分節(jié)點(diǎn)右側(cè)的全部節(jié) 點(diǎn)搬移到新建從樹中,然后進(jìn)入步驟801;
步驟805:將待插節(jié)點(diǎn)插入到當(dāng)前從樹中。
上述實(shí)施例中,將樹形數(shù)據(jù)結(jié)構(gòu)的樹分成主樹和從樹降低了樹的高度, 減少了數(shù)據(jù)插入的時(shí)間,提高了節(jié)點(diǎn)的插入速度。
具體地,如圖9所示,本發(fā)明實(shí)施例給出了上述根據(jù)待插節(jié)點(diǎn)的關(guān)4走碼值 在主樹中查找最近主樹節(jié)點(diǎn),以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng) 前從樹的一種實(shí)現(xiàn)方式,以二叉樹為例,包括以下步驟
步驟901:讀取主樹根節(jié)點(diǎn)的外部指針,設(shè)置變量為上述主樹根節(jié)點(diǎn)的外 部指針,將上述^f艮節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn);
假設(shè)上述變量用Pointer表示,則可以為Pointer =根節(jié)點(diǎn)的外部指針;
步驟902:判斷當(dāng)前節(jié)點(diǎn)是否為空或無效,若是,進(jìn)入步驟903,若否, 進(jìn)入步驟904;
步驟903:以上述變量指向的從樹作為當(dāng)前從樹;
步驟904:判斷待插節(jié)點(diǎn)關(guān)鍵碼值是否大于上述主樹節(jié)點(diǎn)的關(guān)鍵碼值,若 是,進(jìn)入步驟906,若否,進(jìn)入步驟905;
步驟905:設(shè)置上述變量為上述主樹節(jié)點(diǎn)的右子節(jié)點(diǎn)的外部指針(可以表 示為Pointer二左子節(jié)點(diǎn)的外部指針),將上述右子節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn),進(jìn)入 步驟907;
步驟906:將上述當(dāng)前節(jié)點(diǎn)的左子節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn)(此時(shí)Pointer沒有改 變),進(jìn)入步驟907。
步驟907:判斷上述當(dāng)前節(jié)點(diǎn)是否為上述主樹的葉子節(jié)點(diǎn);若是,進(jìn)入步 驟903;若否,進(jìn)入步驟902;
上述實(shí)施方式提供了根據(jù)待插節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找最近主樹節(jié) 點(diǎn),以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從樹的一種實(shí)現(xiàn)方式, 可以理解的是實(shí)現(xiàn)的方案還有很多,上述舉例不應(yīng)理解為實(shí)現(xiàn)方案的窮舉,故上述實(shí)施方式不應(yīng)理解為對(duì)本發(fā)明實(shí)施例的限定。
上述實(shí)施例四與實(shí)施一的方案具有的實(shí)現(xiàn)思想相同,區(qū)別點(diǎn)在于本實(shí) 施例中主樹的根節(jié)點(diǎn)的關(guān)4走碼值在進(jìn)行初始化時(shí)設(shè)置為最大值。節(jié)點(diǎn)的查找 和刪除的方法與實(shí)施例一和實(shí)施例二相同,首先在主樹中查找待查/刪節(jié)點(diǎn), 失敗后,查找最近主樹節(jié)點(diǎn),然后在最近主樹節(jié)點(diǎn)的外部指針指向的從樹中 查找到待查/刪節(jié)點(diǎn),然后刪除待刪節(jié)點(diǎn)。在此不再贅述。另,如果最近主樹 節(jié)點(diǎn)的外部指針指向了多棵從樹,可以參考多叉樹的插入、查找和刪除的方 法。
實(shí)施例五,如圖10所示,本發(fā)明實(shí)施例還提供了一種存儲(chǔ)裝置,包括 從樹存儲(chǔ)單元IOOI,用于存儲(chǔ)從樹;
主樹存儲(chǔ)單元1002,用于存儲(chǔ)主樹,主樹中的節(jié)點(diǎn)具有指向從樹的外部 指針;上述主樹的根節(jié)點(diǎn)初始化為具有最小的關(guān)鍵碼值,上述主樹中的左子 節(jié)點(diǎn)大于父節(jié)點(diǎn),父節(jié)點(diǎn)大于右子節(jié)點(diǎn)。
可選地,上述從樹存儲(chǔ)單元和上述主樹存儲(chǔ)單元均為隨機(jī)存取存儲(chǔ)器。 當(dāng)然采用其它類型的存儲(chǔ)器來存儲(chǔ)主樹或從樹也是可以的,本發(fā)明實(shí)施例對(duì) 此不作限定。
實(shí)施例六,如圖ll所示,本發(fā)明實(shí)施例還提供了一種插入裝置IIOO,上 述插入裝置包括
查找單元1101,用于根據(jù)待插節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找最近主樹節(jié) 點(diǎn),在搬移單元1103將當(dāng)前從樹中位于拆分節(jié)點(diǎn)右側(cè)的全部節(jié)點(diǎn)搬移到新建 從樹中后執(zhí)行查找最近主樹節(jié)點(diǎn),上述最近主樹節(jié)點(diǎn)的關(guān)鍵碼值d、于且最接 近待插節(jié)點(diǎn)的關(guān)鍵碼值;上述主樹的根節(jié)點(diǎn)初始化為具有最小的關(guān)鍵碼值; 上述主樹中的左子節(jié)點(diǎn)大于父節(jié)點(diǎn),父節(jié)點(diǎn)大于右子節(jié)點(diǎn);
判斷單元1102,用于以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從 樹,判斷當(dāng)前從樹是否已滿;
^:移單元1103,用于在當(dāng)前從樹已滿時(shí),在當(dāng)前/人樹中任意選擇一個(gè)節(jié) 點(diǎn)作為拆分節(jié)點(diǎn),將拆分節(jié)點(diǎn)插入到主樹中作為新建主樹節(jié)點(diǎn),為新建主樹 節(jié)點(diǎn)分配新建從樹,并將新建主樹節(jié)點(diǎn)的外部指針指向新建從樹,將當(dāng)前從 樹中位于拆分節(jié)點(diǎn)左側(cè)的全部節(jié)點(diǎn)搬移到新建從樹中;插入單元1104,用于在當(dāng)前從樹未滿時(shí),將待插節(jié)點(diǎn)插入到當(dāng)前從樹中。
如圖12所示,上述插入裝置還可以包括'.
平衡單元1201,用于對(duì)主樹進(jìn)行平衡處理。經(jīng)平衡操作后主樹的有效節(jié) 點(diǎn)在主樹中具有最小的深度。
實(shí)施例七,如圖13所示,本發(fā)明實(shí)施例還^是供了一種查找裝置1300,包 括第一查找單元1301,用于根據(jù)待查節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找待查節(jié) 點(diǎn),若主樹中不存在上述待查節(jié)點(diǎn),則查找最近主樹節(jié)點(diǎn);上述最近主樹節(jié) 點(diǎn)的關(guān)鍵碼值小于且最接近待插節(jié)點(diǎn)的關(guān)鍵碼值;若主樹中存在上述待查節(jié) 點(diǎn),則在主樹中已經(jīng)查找到需要查找的節(jié)點(diǎn),查找流程結(jié)束;
待查節(jié)點(diǎn)查找單元1302,用于以上述最近主樹節(jié)點(diǎn)的外部指針指向的從 樹作為當(dāng)前從樹;在上述當(dāng)前/人樹中查找上述待查找節(jié)點(diǎn)。
上述查找裝置可以為現(xiàn)場可編程門陣列或?qū)S眉呻娐罚划?dāng)然采用其 它類型的物理實(shí)體來實(shí)現(xiàn)上述查找裝置1300的功能也是可以的,對(duì)此本發(fā)明 實(shí)施例不作限定。
實(shí)施例八,如圖14所示,本發(fā)明實(shí)施例還^是供了一種刪除裝置1400包括
第二查找單元1401 ,用于根據(jù)待刪節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找待刪節(jié) 點(diǎn),若主樹中不存在上述待刪節(jié)點(diǎn),則查找最近主樹節(jié)點(diǎn);上述最近主樹節(jié) 點(diǎn)的關(guān)鍵碼值'J 、于且最接近待刪節(jié)點(diǎn)的關(guān)鍵碼值;
待刪節(jié)點(diǎn)查找單元1402,用于以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作 為當(dāng)前從樹;在上述當(dāng)前從樹中查找上述待刪節(jié)點(diǎn);
刪除單元1403,刪除上述查找到的待刪節(jié)點(diǎn)。
實(shí)施例九,如圖15所示,本發(fā)明實(shí)施例還提供了一種合并裝置1500,包
括
檢測單元1501,用于檢測上述主樹中的第一正整數(shù)個(gè)相鄰的節(jié)點(diǎn)指向的 從樹中的有效節(jié)點(diǎn)數(shù),小于第二正整數(shù)個(gè)從樹能夠容納的節(jié)點(diǎn)數(shù),且上述第 一正整數(shù)大于第二正整數(shù)
合并單元1502:在檢測單元1501檢測結(jié)果為是時(shí),用于將上述主樹中的 第一正整數(shù)個(gè)相鄰節(jié)點(diǎn),及上述第一正整數(shù)個(gè)節(jié)點(diǎn)分別指向的從樹,合并為 第二正整數(shù)個(gè)主樹節(jié)點(diǎn),以及與上述第二正整數(shù)個(gè)主樹節(jié)點(diǎn)指向的從樹。
1實(shí)施例十,如圖16所示,本發(fā)明實(shí)施例還提供了另一種插入裝置1600, 包括
查找單元1601,用于根據(jù)待插節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找最近的主樹 節(jié)點(diǎn),在搬移單元1603將當(dāng)前從樹中位于拆分節(jié)點(diǎn)右側(cè)的全部節(jié)點(diǎn)搬移到新 建從樹中后執(zhí)行查找最近主樹節(jié)點(diǎn),上述最近主樹節(jié)點(diǎn)的關(guān)鍵碼值大于且最 接近待插節(jié)點(diǎn)的關(guān)鍵碼值;上述主樹的根節(jié)點(diǎn)初始化為具有最大的關(guān)鍵碼值; 上述主樹中的左子節(jié)點(diǎn)大于父節(jié)點(diǎn),父節(jié)點(diǎn)大于右子節(jié)點(diǎn);
判斷單元1602,用于以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從 樹,判斷當(dāng)前從樹是否已滿,
搬移單元1603,若判斷單元1602判斷結(jié)果為是,則用于在當(dāng)前從樹中任 意選擇一個(gè)節(jié)點(diǎn)作為拆分節(jié)點(diǎn),將拆分節(jié)點(diǎn)插入到主樹中作為新建主樹節(jié)點(diǎn), 為新建主樹節(jié)點(diǎn)分配新建從樹,并將新建主樹節(jié)點(diǎn)的外部指針指向新建從樹, 將當(dāng)前從樹中位于拆分節(jié)點(diǎn)右側(cè)的全部節(jié)點(diǎn)搬移到新建從樹中;
插入單元1604,若判斷單元1602判斷結(jié)果為是否,則用于將待插節(jié)點(diǎn)插 入到當(dāng)前從樹中。
實(shí)施例十一,本發(fā)明實(shí)施例還提供了一種通信設(shè)備,包括
實(shí)施例五所述的存儲(chǔ)裝置,和實(shí)施例六到實(shí)施例九所述的至少一個(gè)裝置; 或者,實(shí)施例五所述的存儲(chǔ)裝置,和實(shí)施例六到實(shí)施例九、實(shí)施例十所述的 至少一個(gè)裝置。
實(shí)施例十二,本發(fā)明實(shí)施例還提供了上述實(shí)施例一到實(shí)施例十一的方法 或裝置一個(gè)應(yīng)用場景,如圖17所示,可以一并參考圖18,包括
現(xiàn)場可編程門陣列1703 ( Field-programmable gate array, FPGA ),上述現(xiàn) 場可編程門陣列1703也可以為專用集成電路(Application Specific Intergrated Circuits , ASIC);
現(xiàn)場可編程門陣列1703可以具有兩個(gè)接口 與中央處理器1701連接的管 理接口和與查找控制裝置1702連接的查找接口 ;上述查找控制裝置1702可以 為路由器的網(wǎng)絡(luò)處理器;
晶片內(nèi)建隨機(jī)存取存儲(chǔ)器1704 ( Onchip RAM)可以集成于現(xiàn)場可編程門 陣列1703內(nèi)部,在現(xiàn)場可編程門陣列1703的外部還可以有隨機(jī)存取存儲(chǔ)器1705 (Random-access memory , RAM);晶片內(nèi)建隨才踏取存儲(chǔ)器1704和隨機(jī) 存取存儲(chǔ)器1705,共同用于存儲(chǔ)主樹和從樹;在本實(shí)施例中,可以只有晶片 內(nèi)建隨機(jī)存取存儲(chǔ)器1704,用于存儲(chǔ)主樹和從樹,也可以只有隨機(jī)存取存儲(chǔ) 器1705,用于存儲(chǔ)主樹和從樹;圖18中的虛線三角形為本發(fā)明實(shí)施例的樹在 晶片內(nèi)建隨機(jī)存取存儲(chǔ)器1704和隨機(jī)存取存儲(chǔ)器1705存儲(chǔ)的一個(gè)示意,大致 表示了在所述晶片內(nèi)建隨才錄M儲(chǔ)器1704和隨機(jī)存取存儲(chǔ)器1705中存儲(chǔ)的 樹的各部分的位置;
查找控制裝置1702可以通過查找接口向現(xiàn)場可編程門陣列1703發(fā)送查找 指令,然后通過查找接口接收查找的結(jié)果;上述查找過程的執(zhí)行主體可以為 現(xiàn)場可編程門陣列1703,具體查找的實(shí)現(xiàn),可以參考前述的方法或裝置實(shí)施 例來實(shí)現(xiàn)。
中央處理器1701可以通過管理端口向現(xiàn)場可編程門陣列1703發(fā)送管理樹 的命令,上述管理樹的命令可以為插入、或者刪除等命令;現(xiàn)場可編程門陣 列1703接收到管理樹的命令后,對(duì)樹進(jìn)行管理;對(duì)樹管理的具體實(shí)現(xiàn)可以參 考前述的方法或裝置實(shí)施例插入、刪除等的實(shí)現(xiàn)。
本實(shí)施例中,中央處理器1701、現(xiàn)場可編程門陣列1703、晶片內(nèi)建隨機(jī) 存取存儲(chǔ)器]704和隨機(jī)存取存儲(chǔ)器1705可以處于同一個(gè)通信設(shè)備中;查找控 制裝置1702可以與上述通信設(shè)備通過查找接口連接,處于上述通信設(shè)備的外 部。
本實(shí)施例中,現(xiàn)場可編程門陣列1703可以只有管理接口,此時(shí),圖17中 的查找控制裝置1702是不必要的;現(xiàn)場可編程門陣列1703也可以只有查找接 口,此時(shí),圖17中的中央處理器1701是不必要的。
在本實(shí)施例中,關(guān)鍵碼值可以是介質(zhì)訪問控制(Media Access Control , MAC)地址的值,也可是MAC地址與其它信息的組合;上述其它信息可以為 虛擬局域網(wǎng)(Virtual Local Area Network, VLAN)地址等,本實(shí)施例對(duì)上述 其它信息不作限定,可以理解的是,上述MAC地址、VLAN地址、MAC地址 與其它信息的組合的舉例不是關(guān)鍵碼值的類型的窮舉,不應(yīng)理解為對(duì)本發(fā)明 實(shí)施例的限定。
本發(fā)明實(shí)施例還給出了 ,在路由器中使用實(shí)施例一到實(shí)施例十一中任意一種方法或裝置思想的實(shí)施例
如圖19所示,為一種從本發(fā)明實(shí)施例的樹形數(shù)據(jù)結(jié)構(gòu)中查找數(shù)據(jù)的方法 實(shí)施例,可以包括以下步驟
步驟1901:路由器接收數(shù)據(jù)報(bào)文;
上述數(shù)據(jù)報(bào)文可以為在路由器的任意物理輸入端口輸入的數(shù)據(jù)4艮文;
步驟1902:路由器根據(jù)上述數(shù)據(jù)報(bào)文攜帶的需要查找的數(shù)據(jù)的關(guān)鍵碼值, 在主樹/從樹中查找與上述關(guān)4走碼值相同的節(jié)點(diǎn);上述主樹和從樹可以存儲(chǔ)在 路由器的存儲(chǔ)器中;
上述步驟1902具體查找方法可以參考實(shí)施例二的方法;上述才艮文可以為 二層轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)文,上述關(guān)鍵碼可以表示為MAC地址、也可以表示為MAC 地址和VLAN信息;
步驟1903:路由器讀取查找到的節(jié)點(diǎn)的數(shù)據(jù)信息,并將上述數(shù)據(jù)信息更 新到上述數(shù)據(jù)報(bào)文;
步驟1904:路由器將上述更新后的數(shù)據(jù)報(bào)文從上述查找到的節(jié)點(diǎn)的數(shù)據(jù) 信息指示的端口輸出。
如圖20所示,為一種更新本發(fā)明實(shí)施例的樹形數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)的方法 實(shí)施例,可以包括以下步驟
步驟2001:路由器的端口接收協(xié)議報(bào)文,并將上述協(xié)議報(bào)文發(fā)送給CPU;
步驟2002: CPU獲得所述報(bào)文的關(guān)鍵碼值;獲得的方式可以是對(duì)協(xié)議報(bào) 文進(jìn)行解析,得到關(guān)鍵碼值;
步驟2003: CPU發(fā)送插入命令給FPGA,命令將上述關(guān)鍵碼值的協(xié)議報(bào)文 插入到主樹/從樹中。具體的插入方法可以參考實(shí)施例一的方法。
上述協(xié)議報(bào)文可以是地址解析協(xié)議(Address Resolution Protocol, ARP ) 表項(xiàng);當(dāng)然上述協(xié)議報(bào)文也可以是其它類型的協(xié)議報(bào)文,本發(fā)明實(shí)施例對(duì)此 不作限定;
如圖21所示,為更新本發(fā)明實(shí)施例的樹形數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)的另 一種方 法實(shí)施例,可以包括以下步驟
步驟2101:路由器的端口接收數(shù)據(jù)報(bào)文;步驟2102:根據(jù)上述數(shù)據(jù)報(bào)文的指示或上述數(shù)據(jù)報(bào)文的輸入端口信息, 發(fā)送插入消息給CPU;上述插入消息包含關(guān)鍵碼值;上述關(guān)鍵碼值為上述數(shù) 據(jù)報(bào)文的關(guān)鍵碼值;
步驟2103: CPU解析上述插入消息得到關(guān)鍵碼值,然后發(fā)送插入命令給 FPGA,命令將上述關(guān)鍵碼值的數(shù)據(jù)報(bào)文插入到主樹/從樹中。具體的插入方法 可以參考實(shí)施例 一 的方法。
上述數(shù)據(jù)報(bào)文可以是MAC表項(xiàng);當(dāng)然協(xié)議報(bào)文也可以是其它類型的數(shù)據(jù) 報(bào)文,本發(fā)明實(shí)施例對(duì)此不作限定。所述插入消息用于指示要在主樹/從樹中 插入數(shù)據(jù)。
在上述實(shí)施例中路由器采用樹形數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)大容量表項(xiàng)的插入,由 于本發(fā)明實(shí)施例中的樹形數(shù)據(jù)結(jié)構(gòu)降低了樹的高度,可以提高表項(xiàng)的插入速率。
上述實(shí)施例中,將樹形數(shù)據(jù)結(jié)構(gòu)的樹分成主樹和從樹降低了樹的高度, 減少了節(jié)點(diǎn)插入的時(shí)間,提高了節(jié)點(diǎn)的插入速度。由于樹的高度降低了,可 以更快的查找到待查節(jié)點(diǎn)、待刪節(jié)點(diǎn),從而提高了查找節(jié)點(diǎn)和刪除節(jié)點(diǎn)的速 度。通過平衡主樹可以降低主樹的高度,從而進(jìn)一步降低整棵樹的高度,提 高插入、查找、刪除節(jié)點(diǎn)的速度。另外通過對(duì)從樹的合并釋放存儲(chǔ)資源達(dá)到 了提高存儲(chǔ)空間利用率的效果。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟 是可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī) 可讀存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是存儲(chǔ)器(RAM)、內(nèi)存、只讀存 儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移 動(dòng)磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
以上對(duì)本發(fā)明實(shí)施例所提供的基于樹形數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)的插入的方法和存
進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思 想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方 式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本 發(fā)明的限制。
權(quán)利要求
1、一種基于樹形數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)的插入方法,其特征在于,包括根據(jù)待插節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找最近主樹節(jié)點(diǎn),所述最近主樹節(jié)點(diǎn)的關(guān)鍵碼值小于且最接近待插節(jié)點(diǎn)的關(guān)鍵碼值;所述主樹的根節(jié)點(diǎn)初始化為具有最小的關(guān)鍵碼值;其中,所述主樹包括父節(jié)點(diǎn)、所述父節(jié)點(diǎn)的左子節(jié)點(diǎn)和所述父節(jié)點(diǎn)的右子節(jié)點(diǎn),且所述左子節(jié)點(diǎn)大于所述父節(jié)點(diǎn),所述父節(jié)點(diǎn)大于所述右子節(jié)點(diǎn);以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從樹,判斷當(dāng)前從樹是否已滿,若是,則在當(dāng)前從樹中任意選擇一個(gè)節(jié)點(diǎn)作為拆分節(jié)點(diǎn),將拆分節(jié)點(diǎn)插入到主樹中作為新建主樹節(jié)點(diǎn),為新建主樹節(jié)點(diǎn)分配新建從樹,并將新建主樹節(jié)點(diǎn)的外部指針指向新建從樹,將當(dāng)前從樹中位于拆分節(jié)點(diǎn)左側(cè)的全部節(jié)點(diǎn)搬移到新建從樹中,然后執(zhí)行查找最近主樹節(jié)點(diǎn),若否,則將待插節(jié)點(diǎn)插入到當(dāng)前從樹中。
2、 根據(jù)權(quán)利要求l所述方法,其特征在于,所述根據(jù)待插節(jié)點(diǎn)的關(guān)鍵碼 值在主樹中查找最近主樹節(jié)點(diǎn),以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為 當(dāng)前/人樹具體為讀取主樹根節(jié)點(diǎn)的外部指針,設(shè)置變量為所述主樹根節(jié)點(diǎn)的外部指針, 將所述^f艮節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn);判斷待插節(jié)點(diǎn)關(guān)鍵碼值是否大于所述主樹節(jié)點(diǎn)的關(guān)鍵碼值,設(shè)置所述變 量為所述主樹節(jié)點(diǎn)的左子節(jié)點(diǎn)的外部指針,將所述左子節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn), 若否,將所述當(dāng)前節(jié)點(diǎn)的右子節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn);判斷當(dāng)前節(jié)點(diǎn)是否為葉子節(jié)點(diǎn),若是,以所述變量指向的從樹作為當(dāng)前 從樹。.
3、 根據(jù)權(quán)利要求2所述方法,其特征在于,還包括 判斷當(dāng)前節(jié)點(diǎn)是否為空或無效,若是,以所述變量指向的從樹作為當(dāng)前從樹。
4、 根據(jù)權(quán)利要求l所述方法,其特征在于,還包括對(duì)主樹進(jìn)行平衡操作, 所述對(duì)主樹進(jìn)行平衡操作包括在所述主樹的某一深度的節(jié)點(diǎn)處于未滿狀態(tài),且所述某一深度非所述主樹的最下層時(shí),執(zhí)行對(duì)主樹進(jìn)行平衡操作;或在最下層節(jié)點(diǎn)以上的各深度節(jié)點(diǎn)的為空的數(shù)量達(dá)到設(shè)定值時(shí),執(zhí)行對(duì)主 樹進(jìn)行平衡操作。
5、 根據(jù)權(quán)利要求1至4任意一項(xiàng)所述方法,其特征在于,所述當(dāng)前從樹是 否已滿包括所述當(dāng)前從樹的使用率是否達(dá)到設(shè)定的使用率,若是,則確定所述當(dāng)前 從樹已滿,若否,則確定所述當(dāng)前從樹未滿。
6、 根據(jù)權(quán)利要求1至4任意一項(xiàng)所述方法,其特征在于,所述根據(jù)待插節(jié) 點(diǎn)的關(guān)鍵碼值在主樹中查找最近主樹節(jié)點(diǎn)之前還包括通過路由器的輸入端口接收?qǐng)?bào)文,并獲得所述報(bào)文的關(guān)鍵碼值; 所述將待插節(jié)點(diǎn)插入到當(dāng)前從樹中包括 將所述關(guān)鍵碼值的協(xié)議々艮文插入當(dāng)前從樹中。
7、 根據(jù)權(quán)利要求1至4任意一項(xiàng)所述方法,其特征在于,還包括 根據(jù)待查節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找待查節(jié)點(diǎn),若主樹中不存在上述待查節(jié)點(diǎn),則查找最近主樹節(jié)點(diǎn);所述最近主樹節(jié)點(diǎn)的關(guān)鍵碼值小于且最接 近待插節(jié)點(diǎn)的關(guān)鍵碼值;以所述最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前/人樹;在所述當(dāng)前從樹中查找所述待查找節(jié)點(diǎn);或還包括根據(jù)待刪節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找待刪節(jié)點(diǎn),若主樹中不存在上述 待刪節(jié)點(diǎn),則查找最近主樹節(jié)點(diǎn);所述最近主樹節(jié)點(diǎn)的關(guān)鍵碼值小于且最接 近待刪節(jié)點(diǎn)的關(guān)鍵碼值;以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從樹;在所述當(dāng)前從樹中查找所述待刪節(jié)點(diǎn);刪除所述查找到的待刪節(jié)點(diǎn)。
8、 根據(jù)權(quán)利要求7所述方法,其特征在于,所述根據(jù)待查節(jié)點(diǎn)的關(guān)鍵碼 值在主樹中查找待查節(jié)點(diǎn)之前還包括通過路由器的輸入端口接收數(shù)據(jù)報(bào)文,并得到所述數(shù)據(jù)報(bào)文需要查找的 數(shù)據(jù)的關(guān)鍵碼值即為待查節(jié)點(diǎn)的關(guān)鍵碼值;所述在當(dāng)前從樹中查找待查找節(jié)點(diǎn)之后還包括讀取查找到的節(jié)點(diǎn)的數(shù)據(jù)信息,并請(qǐng)上述數(shù)據(jù)信息更新到所述數(shù)據(jù)才艮文; 然后將所述更新后的數(shù)據(jù)報(bào)文從所述查找到的節(jié)點(diǎn)的數(shù)據(jù)信息指示的端口輸 出;和/或所述刪除所述查找到的待刪節(jié)點(diǎn)之后還包括當(dāng)所述主樹中的第一正整數(shù)個(gè)相鄰的節(jié)點(diǎn)指向的從樹中的有效節(jié)點(diǎn)數(shù), 小于第二正整數(shù)個(gè)從樹能夠容納的節(jié)點(diǎn)數(shù),且所述第一正整數(shù)大于第二正整 數(shù)時(shí)將所述主樹中的第 一正整數(shù)個(gè)相鄰節(jié)點(diǎn),及所述第一正整數(shù)個(gè)節(jié)點(diǎn)分別 指向的從樹,合并為第二正整數(shù)個(gè)主樹節(jié)點(diǎn),以及與所述第二正整數(shù)個(gè)主 樹節(jié)點(diǎn)指向的從樹。
9、 根據(jù)權(quán)利要求8所述方法,其特征在于,所述主樹中的第一正整數(shù)個(gè) 相鄰的節(jié)點(diǎn)指向的從樹中的有效節(jié)點(diǎn)數(shù),小于第二正整數(shù)個(gè)從樹能夠容納的 節(jié)點(diǎn)數(shù)包括主樹中兩個(gè)相鄰的節(jié)點(diǎn)指向的從樹中的有效節(jié)點(diǎn)數(shù),小于一個(gè)從樹能夠 容納的節(jié)點(diǎn)數(shù);所述將主樹中的第一正整數(shù)個(gè)相鄰節(jié)點(diǎn),及所述笫一正整數(shù)個(gè)節(jié)點(diǎn)分別 指向的從樹,合并為第二正整數(shù)個(gè)主樹節(jié)點(diǎn),以及與所述第二正整數(shù)個(gè)主 樹節(jié)點(diǎn)指向的從樹具體為將所述主樹中,兩個(gè)相鄰節(jié)點(diǎn)中較大的主樹節(jié)點(diǎn),及其指向的從樹中的 有效節(jié)點(diǎn),插入所述兩個(gè)相鄰節(jié)點(diǎn)中較小的主樹節(jié)點(diǎn)指向的從樹中。
10、 一種基于樹形數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)的插入方法,其特征在于,包括 才艮據(jù)待插節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找最近主樹節(jié)點(diǎn),所述最近主樹節(jié)點(diǎn)的關(guān)鍵碼值大于且最接近待插節(jié)點(diǎn)的關(guān)鍵碼值;所述主樹的根節(jié)點(diǎn)初始化 為具有最大的關(guān)鍵碼值;所述主樹中的左子節(jié)點(diǎn)大于父節(jié)點(diǎn),父節(jié)點(diǎn)大于右 子節(jié)點(diǎn);以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從樹,判斷當(dāng)前從樹是 否已滿,若是,則在當(dāng)前從樹中任意選擇一個(gè)節(jié)點(diǎn)作為拆分節(jié)點(diǎn),將拆分節(jié)點(diǎn)插 入到主樹中作為新建主樹節(jié)點(diǎn),為新建主樹節(jié)點(diǎn)分配新建從樹,并將新建主樹節(jié)點(diǎn)的外部指針指向新建從樹,將當(dāng)前從樹中位于拆分節(jié)點(diǎn)右側(cè)的全部節(jié)點(diǎn)搬移到新建從樹中,然后執(zhí)行查找最近主樹節(jié)點(diǎn); 若否,則將待插節(jié)點(diǎn)插入到當(dāng)前從樹中。
11、 一種存儲(chǔ)裝置,其特征在于,包括 從樹存儲(chǔ)單元,用于存儲(chǔ)從樹;主樹存儲(chǔ)單元,用于存儲(chǔ)主樹,主樹中的節(jié)點(diǎn)具有指向從樹的外部指針。
12、 如權(quán)利要求ll所述的存儲(chǔ)裝置,其特征在于,所述存儲(chǔ)裝置還包括 查找單元,用于根據(jù)待插節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找最近主樹節(jié)點(diǎn),所述最近主樹節(jié)點(diǎn)的關(guān)鍵碼值小于且最接近待插節(jié)點(diǎn)的關(guān)鍵碼值;所述主樹 的才艮節(jié)點(diǎn)初始化為具有最小的關(guān)鍵碼值;其中,所述主樹包括父節(jié)點(diǎn)、所述 父節(jié)點(diǎn)的左子節(jié)點(diǎn)和所述父節(jié)點(diǎn)的右子節(jié)點(diǎn),且所述左子節(jié)點(diǎn)大于所述父節(jié) 點(diǎn),所述父節(jié)點(diǎn)大于所述右子節(jié)點(diǎn),判斷單元,用于以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從樹, 判斷當(dāng)前從樹是否已滿,搬移單元,若判斷單元判斷結(jié)果為是,則用于在當(dāng)前從樹中任意選擇一 個(gè)節(jié)點(diǎn)作為拆分節(jié)點(diǎn),將拆分節(jié)點(diǎn)插入到主樹中作為新建主樹節(jié)點(diǎn),為新建 主樹節(jié)點(diǎn)分配新建從樹,并將新建主樹節(jié)點(diǎn)的外部指針指向新建從樹,將當(dāng) 前從樹中位于拆分節(jié)點(diǎn)左側(cè)的全部節(jié)點(diǎn)搬移到新建從樹中,插入單元,若判斷單元判斷結(jié)果為是否,則用于將待插節(jié)點(diǎn)插入到當(dāng)前 從樹中;或者, 所述存儲(chǔ)裝置還包括第一查找單元,根據(jù)待查節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找待查節(jié)點(diǎn),若主 樹中不存在上述待查節(jié)點(diǎn),則查找最近主樹節(jié)點(diǎn);所述最近主樹節(jié)點(diǎn)的關(guān)4建 碼值、于且最接近待插節(jié)點(diǎn)的關(guān)鍵碼值,待查節(jié)點(diǎn)查找單元,用于以所述最近主樹節(jié)點(diǎn)的外部指針指向的從樹作 為當(dāng)前從樹;在所述當(dāng)前從樹中查找所述待查找節(jié)點(diǎn);或者,所述存儲(chǔ)裝置還包括第二查找單元,用于根據(jù)待刪節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找待刪節(jié)點(diǎn),若主樹中不存在上述待刪節(jié)點(diǎn),則查找最近主樹節(jié)點(diǎn);所述最近主樹節(jié)點(diǎn)的 關(guān)鍵碼值'J 、于且最接近待刪節(jié)點(diǎn)的關(guān)鍵碼值,待刪節(jié)點(diǎn)查找單元,用于以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng) 前從樹;在所述當(dāng)前從樹中查找所述待刪節(jié)點(diǎn),刪除單元,刪除所述查找到的待刪節(jié)點(diǎn);或者,所述存儲(chǔ)裝置還包括檢測單元,用于檢測所述主樹中是否存在主樹中的第 一正整數(shù)個(gè)相鄰的 節(jié)點(diǎn)指向的從樹中的有效節(jié)點(diǎn)數(shù),小于第二正整數(shù)個(gè)從樹能夠容納的節(jié)點(diǎn)數(shù), 且所述第一正整數(shù)大于第二正整數(shù),合并單元用于在檢測單元檢測結(jié)果為是時(shí),將所述主樹中的第一正整 數(shù)個(gè)相鄰節(jié)點(diǎn),及所述第一正整數(shù)個(gè)節(jié)點(diǎn)分別指向的從樹,合并為第二正 整數(shù)個(gè)主樹節(jié)點(diǎn),以及與所述第二正整數(shù)個(gè)主樹節(jié)點(diǎn)指向的從樹。
13、 根據(jù)權(quán)利要求ll所述存儲(chǔ)裝置,其特征在于,還包括 查找單元,用于才艮據(jù)待插節(jié)點(diǎn)的關(guān)^l碼值在主樹中查找最近主樹節(jié)點(diǎn),在搬移單元將當(dāng)前從樹中位于拆分節(jié)點(diǎn)右側(cè)的全部節(jié)點(diǎn)搬移到新建從樹中后 執(zhí)行查找最近主樹節(jié)點(diǎn),所述最近主樹節(jié)點(diǎn)的關(guān)鍵碼值大于且最接近待插節(jié) 點(diǎn)的關(guān)鍵碼值;所述主樹的根節(jié)點(diǎn)初始化為具有最大的關(guān)鍵碼值,其中,所 述主樹包括父節(jié)點(diǎn)、所述父節(jié)點(diǎn)的左子節(jié)點(diǎn)和所述父節(jié)點(diǎn)的右子節(jié)點(diǎn),且所 述左子節(jié)點(diǎn)大于所述父節(jié)點(diǎn),所述父節(jié)點(diǎn)大于所述右子節(jié)點(diǎn);判斷單元,用于以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前,人樹, 判斷當(dāng)前從樹是否已滿,搬移單元,若判斷單元判斷結(jié)果為是,則用于在當(dāng)前從樹中任意選擇一 個(gè)節(jié)點(diǎn)作為拆分節(jié)點(diǎn),將拆分節(jié)點(diǎn)插入到主樹中作為新建主樹節(jié)點(diǎn),為新建 主樹節(jié)點(diǎn)分配新建從樹,并將新建主樹節(jié)點(diǎn)的外部指針指向新建從樹,將當(dāng) 前從樹中位于拆分節(jié)點(diǎn)右側(cè)的全部節(jié)點(diǎn)搬移到新建從樹中;插入單元,若判斷單元判斷結(jié)果為是否,則用于將待插節(jié)點(diǎn)插入到當(dāng)前 從樹中。
14、 一種通信設(shè)備,其特征在于,包括 權(quán)利要求11至13所述的存儲(chǔ)裝置中的任意一個(gè)。
全文摘要
本發(fā)明實(shí)施例公開了一種基于樹形數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)的插入的方法和存儲(chǔ)裝置。根據(jù)待插節(jié)點(diǎn)的關(guān)鍵碼值在主樹中查找最近主樹節(jié)點(diǎn),所述最近主樹節(jié)點(diǎn)的關(guān)鍵碼值小于且最接近待插節(jié)點(diǎn)的關(guān)鍵碼值;以最近主樹節(jié)點(diǎn)的外部指針指向的從樹作為當(dāng)前從樹,判斷當(dāng)前從樹是否已滿,若是,則在當(dāng)前從樹中任意選擇一個(gè)節(jié)點(diǎn)作為拆分節(jié)點(diǎn),將拆分節(jié)點(diǎn)插入到主樹中作為新建主樹節(jié)點(diǎn),為新建主樹節(jié)點(diǎn)分配新建從樹,并將新建主樹節(jié)點(diǎn)的外部指針指向新建從樹,將當(dāng)前從樹中位于拆分節(jié)點(diǎn)左側(cè)的全部節(jié)點(diǎn)搬移到新建從樹中,然后執(zhí)行查找最近主樹節(jié)點(diǎn),若否,則將待插節(jié)點(diǎn)插入到當(dāng)前從樹中。將樹形數(shù)據(jù)結(jié)構(gòu)的樹分成主樹和從樹降低了樹的高度,減少了節(jié)點(diǎn)插入的時(shí)間。
文檔編號(hào)G06F17/30GK101515298SQ20091013265
公開日2009年8月26日 申請(qǐng)日期2009年3月30日 優(yōu)先權(quán)日2009年3月30日
發(fā)明者毅 易, 杜文華, 洪榮峰 申請(qǐng)人:華為技術(shù)有限公司