專利名稱:一種樹(shù)形結(jié)構(gòu)中數(shù)據(jù)的處理方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)應(yīng)用領(lǐng)域,尤其涉及一種樹(shù)形結(jié)構(gòu)中數(shù)據(jù)的處理方法和系統(tǒng)。
背景技術(shù):
在各種基于關(guān)系數(shù)據(jù)庫(kù)的應(yīng)用系統(tǒng)開(kāi)發(fā)中,我們往往需要存儲(chǔ)樹(shù)型結(jié)構(gòu)的數(shù)據(jù),而很多時(shí)候我們需要用到多個(gè)樹(shù)形結(jié)構(gòu)的模型,目前針對(duì)單一樹(shù)形結(jié)構(gòu)有很多流行的方法,如鄰接列表模型(The Adjacency List Model)、左右值編碼法等,在此基礎(chǔ)上也有很多人針對(duì)不同的需求做了相應(yīng)的改進(jìn),但總是在某些方面存在的各種各樣的缺陷,下面分別以這兩種存儲(chǔ)方法為例進(jìn)行說(shuō)明。首先,鄰接列表模型(The Adjacency List Model)在大多數(shù)編程語(yǔ)言中,他運(yùn)行很慢,效率很差。這主要是“遞歸”造成的,每次查詢節(jié)點(diǎn)都要訪問(wèn)數(shù)據(jù)庫(kù)。每次數(shù)據(jù)庫(kù)查 詢都要花費(fèi)一些時(shí)間,這讓函數(shù)處理龐大的樹(shù)時(shí)會(huì)十分慢;造成這個(gè)函數(shù)不是太快的第二個(gè)原因可能是使用的語(yǔ)言。不像Lisp這類語(yǔ)言,大多數(shù)語(yǔ)言不是針對(duì)遞歸函數(shù)設(shè)計(jì)的。對(duì)于每個(gè)節(jié)點(diǎn),函數(shù)都要調(diào)用他自己,產(chǎn)生新的實(shí)例。于一個(gè)5層的樹(shù),你可能同時(shí)要運(yùn)行5個(gè)函數(shù)副本。對(duì)于每個(gè)函數(shù)都要占用一塊內(nèi)存并且需要一定的時(shí)間初始化,這樣處理大樹(shù)時(shí)遞歸就很慢了。圖I為現(xiàn)有技術(shù)中采用鄰接列表管理樹(shù)形結(jié)構(gòu)的示意圖。其次,左右值編碼法按照先序遍歷的次序進(jìn)行編號(hào),在消除遞歸的前提下實(shí)現(xiàn)了無(wú)限分級(jí),而且查詢條件是基于整型數(shù)字比較的,效率很高??梢赃M(jìn)行先序列表,添加,修改,刪除,同層平移等常規(guī)操作,基本滿足需求。但是經(jīng)過(guò)仔細(xì)研究這種方法也有很大的缺點(diǎn)由于這種左右值編碼的方式和常見(jiàn)的阿拉伯?dāng)?shù)字直觀排序不同,再加上節(jié)點(diǎn)在樹(shù)中的層次,順序不能直觀顯示出來(lái),而必須通過(guò)簡(jiǎn)單的公式計(jì)算后得到,需要花費(fèi)一定的時(shí)間對(duì)其數(shù)學(xué)模型進(jìn)行深入理解。而且,采用該方案編寫(xiě)相關(guān)存儲(chǔ)過(guò)程,新增,刪除,同層平移節(jié)點(diǎn)需要對(duì)整個(gè)樹(shù)進(jìn)行查詢修改,由此導(dǎo)致的代碼復(fù)雜度,耦合度較高,修改維護(hù)的風(fēng)險(xiǎn)較高。圖2為現(xiàn)有技術(shù)中采用左右值編碼法進(jìn)行樹(shù)形結(jié)構(gòu)管理的示意圖。以上兩種方法都不是針對(duì)多個(gè)樹(shù)形結(jié)構(gòu)的存儲(chǔ),對(duì)多個(gè)樹(shù)形結(jié)構(gòu)的處理能力相當(dāng)有限。那么理想中的樹(shù)型結(jié)構(gòu)應(yīng)具備哪些特點(diǎn)呢?數(shù)據(jù)存儲(chǔ)冗余小、直觀性強(qiáng);適用于多個(gè)樹(shù)形結(jié)構(gòu)的情況;方便返回整個(gè)樹(shù)型結(jié)構(gòu)數(shù)據(jù);可以很輕松的返回某一子樹(shù)(方便分層加載);快整獲以某節(jié)點(diǎn)的祖譜路徑;插入、刪除、移動(dòng)節(jié)點(diǎn)效率高等等。
發(fā)明內(nèi)容
本發(fā)明提供一種樹(shù)形結(jié)構(gòu)中數(shù)據(jù)的處理方法和系統(tǒng),要解決的技術(shù)問(wèn)題是如何提高數(shù)據(jù)處理的高效性與可靠性。為解決上述技術(shù)問(wèn)題,本發(fā)明提供了如下技術(shù)方案一種樹(shù)形結(jié)構(gòu)中數(shù)據(jù)的處理方法,所有樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)以遞增的數(shù)字進(jìn)行編號(hào),其中每個(gè)樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)為第一級(jí),深度為i的葉子節(jié)點(diǎn)為第i+Ι級(jí),其中i為大于或等于2的整數(shù),其中同一樹(shù)形結(jié)構(gòu)中深度為i的節(jié)點(diǎn)中同屬于深度為i-Ι的節(jié)點(diǎn)的多個(gè)節(jié)點(diǎn)以遞增的數(shù)字進(jìn)行編號(hào),且樹(shù)形結(jié)構(gòu)上的每個(gè)節(jié)點(diǎn)配置有一個(gè)序號(hào)字段,其中一個(gè)節(jié)點(diǎn)的序號(hào)由該節(jié)點(diǎn)的全部父節(jié)點(diǎn)在各自深度的編號(hào)按照深度從小到大的順序排序而成,其中兩個(gè)父節(jié)點(diǎn)的編號(hào)通過(guò)一預(yù)先設(shè)置的符號(hào)隔開(kāi),其中采用順序存儲(chǔ)的方式將樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)存儲(chǔ)在數(shù)據(jù)庫(kù)中;根據(jù)節(jié)點(diǎn)的編號(hào)對(duì)樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行處理。優(yōu)選的,所述方法還具有如下特點(diǎn)所述預(yù)先設(shè)置的符號(hào)為下劃線。優(yōu)選的,所述方法還 具有如下特點(diǎn)根據(jù)節(jié)點(diǎn)的編號(hào)對(duì)樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行處理,包括當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行增加節(jié)點(diǎn)操作時(shí),且該節(jié)點(diǎn)為葉子節(jié)點(diǎn),則按照該葉子節(jié)點(diǎn)的位置為該節(jié)點(diǎn)編號(hào),并按照順序存儲(chǔ)方式存儲(chǔ)到數(shù)據(jù)庫(kù);如果該節(jié)點(diǎn)不是葉子節(jié)點(diǎn),則根據(jù)新增節(jié)點(diǎn)處的節(jié)點(diǎn)序號(hào),依次修改該葉子節(jié)點(diǎn)的孩子節(jié)點(diǎn)的父節(jié)點(diǎn)域;當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行增加樹(shù)操作時(shí),則新增加一個(gè)根節(jié)點(diǎn),并向該新增加的樹(shù)中添加節(jié)點(diǎn)。優(yōu)選的,所述方法還具有如下特點(diǎn)根據(jù)節(jié)點(diǎn)的編號(hào)對(duì)樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行處理,包括當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行刪除節(jié)點(diǎn)操作時(shí),刪除該節(jié)點(diǎn)以及所有編號(hào)以節(jié)點(diǎn)的編號(hào)開(kāi)頭的節(jié)點(diǎn);當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行刪除樹(shù)操作時(shí)刪除所有編號(hào)以此根節(jié)點(diǎn)的編號(hào)開(kāi)頭的節(jié)點(diǎn)。優(yōu)選的,所述方法還具有如下特點(diǎn)根據(jù)節(jié)點(diǎn)的編號(hào)對(duì)樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行處理,包括如果是對(duì)所有樹(shù)的遍歷,樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)采用順序存儲(chǔ)的方式存儲(chǔ)在數(shù)據(jù)庫(kù)中,僅進(jìn)行一次查詢,并將查詢結(jié)果按照樹(shù)形結(jié)構(gòu)上的節(jié)點(diǎn)的編號(hào)排序輸出;如果是對(duì)某棵樹(shù)的遍歷,查詢以根節(jié)點(diǎn)的編號(hào)開(kāi)頭的所有數(shù)據(jù)記錄;如果查詢某一節(jié)點(diǎn),根據(jù)查詢內(nèi)容直接查詢;如果查詢某一節(jié)點(diǎn)的父節(jié)點(diǎn),查詢編號(hào)字段為此節(jié)點(diǎn)的父節(jié)點(diǎn)域的節(jié)點(diǎn);如果查詢某一節(jié)點(diǎn)的孩子節(jié)點(diǎn),查詢編號(hào)字段為此節(jié)點(diǎn)的序號(hào)后面加上“”開(kāi)頭的數(shù)據(jù)記錄。一種樹(shù)形結(jié)構(gòu)中數(shù)據(jù)的處理系統(tǒng),所有樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)以遞增的數(shù)字進(jìn)行編號(hào),其中每個(gè)樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)為第一級(jí),深度為i的葉子節(jié)點(diǎn)為第i+Ι級(jí),其中i為大于或等于2的整數(shù),其中同一樹(shù)形結(jié)構(gòu)中深度為i的節(jié)點(diǎn)中同屬于深度為i-Ι的節(jié)點(diǎn)的多個(gè)節(jié)點(diǎn)以遞增的數(shù)字進(jìn)行編號(hào),且樹(shù)形結(jié)構(gòu)上的每個(gè)節(jié)點(diǎn)配置有一個(gè)序號(hào)字段,其中一個(gè)節(jié)點(diǎn)的序號(hào)由該節(jié)點(diǎn)的全部父節(jié)點(diǎn)在各自深度的編號(hào)按照深度從小到大的順序排序而成,其中兩個(gè)父節(jié)點(diǎn)的編號(hào)通過(guò)一預(yù)先設(shè)置的符號(hào)隔開(kāi),其中存儲(chǔ)裝置,用于采用順序存儲(chǔ)的方式將樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)存儲(chǔ)在數(shù)據(jù)庫(kù)中;查詢裝置,用于根據(jù)節(jié)點(diǎn)的編號(hào)對(duì)樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行處理。優(yōu)選的,所述系統(tǒng)還具有如下特點(diǎn)所述預(yù)先設(shè)置的符號(hào)為下劃線。優(yōu)選的,所述系統(tǒng)還具有如下特點(diǎn)所述處理裝置包括第一增加模塊,用于當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行增加節(jié)點(diǎn)操作時(shí),且該節(jié)點(diǎn)為葉子節(jié)點(diǎn),則按照該葉子節(jié)點(diǎn)的位置為該節(jié)點(diǎn)編號(hào),并按照順序存儲(chǔ)方式存儲(chǔ)到數(shù)據(jù)庫(kù);如果該節(jié)點(diǎn)不是葉子節(jié)點(diǎn),則根據(jù)新增節(jié)點(diǎn)處的節(jié)點(diǎn)序號(hào),依次修改該葉子節(jié)點(diǎn)的孩子節(jié)點(diǎn)的父節(jié)點(diǎn)域;第二增加模塊,用于當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行增加樹(shù)操作時(shí),則新增加一個(gè)根節(jié)點(diǎn),并向該新增加的樹(shù)中添加節(jié)點(diǎn)。優(yōu)選的,所述系統(tǒng)還具有如下特點(diǎn)所述處理裝置包括第一刪除模塊,用于當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行刪除節(jié)點(diǎn)操作時(shí),刪除該節(jié)點(diǎn)以及所有編號(hào)以節(jié)點(diǎn)的編號(hào)開(kāi)頭的節(jié)點(diǎn);第二刪除模塊,用于當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行刪除樹(shù)操作時(shí)刪除所有編號(hào)以此根節(jié)點(diǎn)的編號(hào)開(kāi)頭的節(jié)點(diǎn)。 優(yōu)選的,所述系統(tǒng)還具有如下特點(diǎn)所述處理裝置包括第一查詢裝置,用于如果是對(duì)所有樹(shù)的遍歷,樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)采用順序存儲(chǔ)的方式存儲(chǔ)在數(shù)據(jù)庫(kù)中,僅進(jìn)行一次查詢,并將查詢結(jié)果按照樹(shù)形結(jié)構(gòu)上的節(jié)點(diǎn)的編號(hào)排序輸出;第二查詢裝置,用于如果是對(duì)某棵樹(shù)的遍歷,查詢以根節(jié)點(diǎn)的序號(hào)開(kāi)頭的所有數(shù)據(jù)記錄;第三查詢裝置,用于如果查詢某一節(jié)點(diǎn),根據(jù)查詢內(nèi)容直接查詢;第四查詢裝置,用于如果查詢某一節(jié)點(diǎn)的父節(jié)點(diǎn),查詢編號(hào)字段為此節(jié)點(diǎn)的父節(jié)點(diǎn)域的節(jié)點(diǎn);第五查詢裝置,用于如果查詢某一節(jié)點(diǎn)的孩子節(jié)點(diǎn),查詢編號(hào)字段為此節(jié)點(diǎn)的序號(hào)后面加上“_”開(kāi)頭的數(shù)據(jù)記錄。本發(fā)明提供的技術(shù)方案,應(yīng)用在涉及多個(gè)樹(shù)形結(jié)構(gòu)的系統(tǒng)中可以方便的實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)的定義、存儲(chǔ)以及增刪改查等常用操作,尤其適合在多個(gè)樹(shù)形結(jié)構(gòu)中查詢某棵樹(shù)的某個(gè)節(jié)點(diǎn),類似的操作只需一個(gè)簡(jiǎn)單的查詢即可,提高了數(shù)據(jù)處理的高效性與可靠性。
圖I為現(xiàn)有技術(shù)中采用鄰接列表管理樹(shù)形結(jié)構(gòu)的示意圖;圖2為現(xiàn)有技術(shù)中采用左右值編碼法進(jìn)行樹(shù)形結(jié)構(gòu)管理的示意圖;圖3為本發(fā)明提供的樹(shù)形結(jié)構(gòu)中數(shù)據(jù)的處理方法實(shí)施例的流程示意圖;圖4為本發(fā)明方法實(shí)施例中樹(shù)形結(jié)構(gòu)的示意圖;圖5為本發(fā)明提供的樹(shù)形結(jié)構(gòu)中數(shù)據(jù)的處理系統(tǒng)實(shí)施例的結(jié)構(gòu)示意圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)描述。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互任意組合。圖3為本發(fā)明提供的樹(shù)形結(jié)構(gòu)中數(shù)據(jù)的處理方法實(shí)施例的流程示意圖。圖3所示方法實(shí)施例中,所有樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)以遞增的數(shù)字進(jìn)行編號(hào),其中每個(gè)樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)為第一級(jí),深度為i的葉子節(jié)點(diǎn)為第i+Ι級(jí),其中i為大于或等于2的整數(shù),其中同一樹(shù)形結(jié)構(gòu)中深度為i的節(jié)點(diǎn)中同屬于深度為i-ι的節(jié)點(diǎn)的多個(gè)節(jié)點(diǎn)以遞增的數(shù)字進(jìn)行編號(hào),且樹(shù)形結(jié)構(gòu)上的每個(gè)節(jié)點(diǎn)配置有一個(gè)序號(hào)字段,其中一個(gè)節(jié)點(diǎn)的序號(hào)由該節(jié)點(diǎn)的全部父節(jié)點(diǎn)以及該節(jié)點(diǎn)在各自深度的編號(hào)按照深度從小到大的順序排序而成,其中兩個(gè)父節(jié)點(diǎn)的編號(hào)通過(guò)預(yù)先設(shè)置的符號(hào)隔開(kāi),其中步驟301、采用順序存儲(chǔ)的方式將樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)存儲(chǔ)在數(shù)據(jù)庫(kù)中;步驟302、根據(jù)節(jié)點(diǎn)的編號(hào)對(duì)樹(shù)形結(jié)構(gòu)的數(shù)據(jù)進(jìn)行處理。本發(fā)明提供了的方法實(shí)施例,基于多個(gè)樹(shù)形結(jié)構(gòu)的數(shù)據(jù)表進(jìn)行分級(jí)存儲(chǔ),以特定的命名規(guī)范采用順序編號(hào)的形式,按照樹(shù)形結(jié)構(gòu)的深度進(jìn)行分級(jí)存儲(chǔ),實(shí)現(xiàn)多個(gè)樹(shù)形結(jié)構(gòu)的數(shù)據(jù)在關(guān)系型數(shù)據(jù)庫(kù)中的存儲(chǔ),與現(xiàn)有技術(shù)中調(diào)用各級(jí)函數(shù)進(jìn)行查詢不同,本實(shí)施例借助節(jié)點(diǎn)編號(hào),明確節(jié)點(diǎn)在樹(shù)形結(jié)構(gòu)中的位置信息,方便對(duì)樹(shù)形結(jié)構(gòu)的管理。
具體來(lái)說(shuō),該屬性結(jié)果能夠提高對(duì)數(shù)據(jù)進(jìn)行增、刪、改、查操作的效率,特別是提高遍歷整個(gè)樹(shù)的效率應(yīng)用在涉及多個(gè)樹(shù)形結(jié)構(gòu)的系統(tǒng)中可以方便的實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)的定義、存儲(chǔ)以及增刪改查等常用操作,尤其適合在多個(gè)樹(shù)形結(jié)構(gòu)中查詢某棵樹(shù)的某個(gè)節(jié)點(diǎn),類似的操作只需一個(gè)簡(jiǎn)單的查詢即可,提高了數(shù)據(jù)處理的高效性與可靠性。下面對(duì)上述方法實(shí)施例作進(jìn)一步說(shuō)明圖4為本發(fā)明方法實(shí)施例中樹(shù)形結(jié)構(gòu)的示意圖。在上述方法實(shí)施例中的樹(shù)形結(jié)構(gòu)為N個(gè),其中,N為大于或等于2的整數(shù),其中N個(gè)樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)可以依次排序?yàn)?,2,3,4......,N。在同一個(gè)樹(shù)形結(jié)構(gòu)里,根節(jié)點(diǎn)的深度為0,配置為第一級(jí),而第二級(jí)即為第一層的葉子節(jié)點(diǎn),其中深度為1,同理,可以推出,第i+Ι級(jí)為深度為i。同一深度的相同父節(jié)點(diǎn)的多個(gè)節(jié)點(diǎn)按照樹(shù)形結(jié)構(gòu)從左到右或者從右到左的順序依次編號(hào),例如,在深度為2的節(jié)點(diǎn)中有三個(gè)節(jié)點(diǎn)同屬于深度為I的節(jié)點(diǎn),那么這三個(gè)節(jié)點(diǎn)可以依次編號(hào),而每個(gè)節(jié)點(diǎn)都有一個(gè)序號(hào),該序號(hào)字段以特定的方式進(jìn)行命名,命名方式采用數(shù)字加下劃線的形式,下劃線連接的是數(shù)字字段的組合,一個(gè)深度為η的節(jié)點(diǎn)的序號(hào)有η個(gè)下劃線加n+1個(gè)數(shù)字字段組成,其中第P個(gè)數(shù)字字段為深度為P-I的父節(jié)點(diǎn)的編號(hào)。當(dāng)然,實(shí)際應(yīng)用中也可以采用其他符號(hào)進(jìn)行,只要能夠劃分開(kāi)兩個(gè)數(shù)字字段即可。由上可以看出,以特定的命名規(guī)范采用順序編號(hào)的形式,節(jié)點(diǎn)的數(shù)據(jù)按照順序存儲(chǔ)結(jié)構(gòu)進(jìn)行存儲(chǔ),實(shí)現(xiàn)按照樹(shù)形結(jié)構(gòu)的深度進(jìn)行分級(jí)存儲(chǔ),實(shí)現(xiàn)多個(gè)樹(shù)形結(jié)構(gòu)的數(shù)據(jù)在關(guān)系型數(shù)據(jù)庫(kù)中的存儲(chǔ),實(shí)現(xiàn)基于多個(gè)樹(shù)形結(jié)構(gòu)的數(shù)據(jù)表分級(jí)存儲(chǔ)的效果。下面詳細(xì)描述上述樹(shù)形結(jié)構(gòu)的運(yùn)行及實(shí)施過(guò)程,主要分為3個(gè)大的步驟SI :分級(jí)樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)為第一級(jí),根節(jié)點(diǎn)的孩子節(jié)點(diǎn)為第二級(jí),以此類推進(jìn)行分級(jí),一個(gè)深度為η的葉子節(jié)點(diǎn)為第n+1級(jí);S2 :編號(hào)對(duì)每個(gè)節(jié)點(diǎn)設(shè)定一個(gè)序號(hào)字段并以特定的方式進(jìn)行命名,命名方式采用數(shù)字加下劃線的形式,下劃線連接的是數(shù)字字段的組合,一個(gè)深度為η的節(jié)點(diǎn)的序號(hào)有η個(gè)下劃線加n+1個(gè)數(shù)字字段組成;自根節(jié)點(diǎn)以后的所有節(jié)點(diǎn)的序號(hào)的最后一個(gè)下劃線之前的部分為其父節(jié)點(diǎn)的序號(hào),之后的部分為遞增的序號(hào);
S3:增、刪、改、查操作增增加節(jié)點(diǎn)添加節(jié)點(diǎn)時(shí)若增加的為葉子節(jié)點(diǎn),只要按規(guī)則編號(hào)順序的存入數(shù)據(jù)庫(kù)即可;若增加的不是葉子節(jié)點(diǎn),以新增節(jié)點(diǎn)處的節(jié)點(diǎn)序號(hào)為新增的節(jié)點(diǎn)序號(hào),依次修改其孩子節(jié)點(diǎn)的父節(jié)點(diǎn)域即可;增加新的樹(shù)新增一個(gè)根節(jié)點(diǎn);向樹(shù)中添加節(jié)點(diǎn)。刪刪除節(jié)點(diǎn)刪除某一節(jié)點(diǎn)A,刪除所有編號(hào)以A節(jié)點(diǎn)的編號(hào)開(kāi)頭的節(jié)點(diǎn)即可;刪除樹(shù)刪除所有編號(hào)以此根節(jié)點(diǎn)的編號(hào)開(kāi)頭的節(jié)點(diǎn)即可。 改讀取該節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù),進(jìn)行修改。查所有樹(shù)的遍歷樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)采用順序存儲(chǔ)的方式存儲(chǔ)在數(shù)據(jù)庫(kù)中,對(duì)此樹(shù)形結(jié)構(gòu)的數(shù)據(jù)進(jìn)行遍歷操作時(shí)只需一次查詢?nèi)〕鏊械臄?shù)據(jù)按序號(hào)排序即可;某棵樹(shù)的遍歷查詢以根節(jié)點(diǎn)的序號(hào)開(kāi)頭的所有數(shù)據(jù)記錄;查詢某一節(jié)點(diǎn)直接根據(jù)查詢內(nèi)容查詢即可查詢某一節(jié)點(diǎn)的父節(jié)點(diǎn)查詢編號(hào)字段為此節(jié)點(diǎn)的父節(jié)點(diǎn)域的節(jié)點(diǎn)即可查詢某一節(jié)點(diǎn)的孩子節(jié)點(diǎn)查詢編號(hào)字段為此節(jié)點(diǎn)的序號(hào)后面加上“開(kāi)頭的數(shù)據(jù)記錄即可;通過(guò)上文所說(shuō)的增、刪、查可以看出,由于節(jié)點(diǎn)的編號(hào)體現(xiàn)了節(jié)點(diǎn)的位置信息,因此在進(jìn)行節(jié)點(diǎn)的增刪操作時(shí),只要按照節(jié)點(diǎn)編號(hào)進(jìn)行處理,就能查找該節(jié)點(diǎn)和該節(jié)點(diǎn)的父節(jié)點(diǎn)和孩子節(jié)點(diǎn),進(jìn)而進(jìn)行相應(yīng)處理,無(wú)需按照現(xiàn)有技術(shù)中的在每層調(diào)用不同函數(shù)進(jìn)行處理,而是進(jìn)行一次搜索即可找到對(duì)應(yīng)的全部處理對(duì)象,簡(jiǎn)單方便;節(jié)點(diǎn)上所存儲(chǔ)的數(shù)據(jù)是按照節(jié)點(diǎn)的編號(hào)順序進(jìn)行了順序存儲(chǔ),即數(shù)據(jù)是按照樹(shù)形結(jié)構(gòu)進(jìn)行分級(jí)存儲(chǔ)的,對(duì)于查詢某個(gè)節(jié)點(diǎn)在作為父節(jié)點(diǎn)時(shí),其孩子節(jié)點(diǎn)的數(shù)據(jù)時(shí),可以根據(jù)該父節(jié)點(diǎn)的編號(hào)確定其上存儲(chǔ)的數(shù)據(jù)在數(shù)據(jù)庫(kù)的存儲(chǔ)層級(jí),進(jìn)而將該層級(jí)下屬的全部數(shù)據(jù)按照順序即可,查詢簡(jiǎn)單方便。本發(fā)明提供了的方法實(shí)施例應(yīng)用在涉及多個(gè)樹(shù)形結(jié)構(gòu)的系統(tǒng)中可以方便的實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)的定義、存儲(chǔ)以及增刪改查等常用操作,尤其適合在多個(gè)樹(shù)形結(jié)構(gòu)中查詢某棵樹(shù)的某個(gè)節(jié)點(diǎn),類似的操作只需一個(gè)簡(jiǎn)單的查詢即可,提高了數(shù)據(jù)處理的高效性與可靠性。因此,本發(fā)明具有以下優(yōu)點(diǎn)適用于多個(gè)樹(shù)形結(jié)構(gòu)的情況;各種查詢操作可靠性強(qiáng)、效率高;序號(hào)編碼設(shè)計(jì)結(jié)構(gòu)清晰,能夠直觀的看出某節(jié)點(diǎn)所處的位置;消耗系統(tǒng)資源少,執(zhí)行效率較高,可靠性強(qiáng),非常適合涉及多個(gè)樹(shù)形結(jié)構(gòu)的中小型系統(tǒng);可擴(kuò)展性強(qiáng),對(duì)節(jié)點(diǎn)序號(hào)稍加改造可以實(shí)現(xiàn)更多更強(qiáng)的控制功能。圖5為本發(fā)明提供的樹(shù)形結(jié)構(gòu)中數(shù)據(jù)的處理系統(tǒng)實(shí)施例的結(jié)構(gòu)示意圖。結(jié)合圖3所示的方法實(shí)施例,圖5所示系統(tǒng)實(shí)施例包括所有樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)以遞增的數(shù)字進(jìn)行編號(hào),其中每個(gè)樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)為第一級(jí),深度為i的葉子節(jié)點(diǎn)為第i+Ι級(jí),其中i為大于或等于2的整數(shù),其中同一樹(shù)形結(jié)構(gòu)中深度為i的節(jié)點(diǎn)中同屬于深度為i-Ι的節(jié)點(diǎn)的多個(gè)節(jié)點(diǎn)以遞增的數(shù)字進(jìn)行編號(hào),且樹(shù)形結(jié)構(gòu)上的每個(gè)節(jié)點(diǎn)配置有一個(gè)序號(hào)字段,其中一個(gè)節(jié)點(diǎn)的序號(hào)由該節(jié)點(diǎn)的全部父節(jié)點(diǎn)在各自深度的編號(hào)按照深度從小到大的順序排序而成,其中兩個(gè)父節(jié)點(diǎn)的編號(hào)通過(guò)一預(yù)先設(shè)置的符號(hào)隔開(kāi),其中存儲(chǔ)裝置501,用于采用順序存儲(chǔ)的方式將樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)存儲(chǔ)在數(shù)據(jù)庫(kù)中;查詢裝置502,用于根據(jù)節(jié)點(diǎn)的編號(hào)對(duì)樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行處理。其中,所述預(yù)先設(shè)置的符號(hào)為下劃線。其中,所述處理裝置包括第一增加模塊,用于當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行增加節(jié)點(diǎn)操作時(shí),且該節(jié)點(diǎn)為葉子節(jié)點(diǎn),則按照該葉子節(jié)點(diǎn)的位置為該節(jié)點(diǎn)編號(hào),并按照順序存儲(chǔ)方式存儲(chǔ)到數(shù)據(jù)庫(kù);如果該節(jié)點(diǎn) 不是葉子節(jié)點(diǎn),則根據(jù)新增節(jié)點(diǎn)處的節(jié)點(diǎn)序號(hào),依次修改該葉子節(jié)點(diǎn)的孩子節(jié)點(diǎn)的父節(jié)點(diǎn)域;第二增加模塊,用于當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行增加樹(shù)操作時(shí),則新增加一個(gè)根節(jié)點(diǎn),并向該新增加的樹(shù)中添加節(jié)點(diǎn)。其中,所述處理裝置包括第一刪除模塊,用于當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行刪除節(jié)點(diǎn)操作時(shí),刪除該節(jié)點(diǎn)以及所有編號(hào)以節(jié)點(diǎn)的編號(hào)開(kāi)頭的節(jié)點(diǎn);第二刪除模塊,用于當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行刪除樹(shù)操作時(shí)刪除所有編號(hào)以此根節(jié)點(diǎn)的編號(hào)開(kāi)頭的節(jié)點(diǎn)。其中,所述處理裝置包括第一查詢裝置,用于如果是對(duì)所有樹(shù)的遍歷,樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)采用順序存儲(chǔ)的方式存儲(chǔ)在數(shù)據(jù)庫(kù)中,僅進(jìn)行一次查詢,并將查詢結(jié)果按照樹(shù)形結(jié)構(gòu)上的節(jié)點(diǎn)的編號(hào)排序輸出;第二查詢裝置,用于如果是對(duì)某棵樹(shù)的遍歷,查詢以根節(jié)點(diǎn)的序號(hào)開(kāi)頭的所有數(shù)據(jù)記錄;第三查詢裝置,用于如果查詢某一節(jié)點(diǎn),根據(jù)查詢內(nèi)容直接查詢;第四查詢裝置,用于如果查詢某一節(jié)點(diǎn)的父節(jié)點(diǎn),查詢編號(hào)字段為此節(jié)點(diǎn)的父節(jié)點(diǎn)域的節(jié)點(diǎn);第五查詢裝置,用于如果查詢某一節(jié)點(diǎn)的孩子節(jié)點(diǎn),查詢編號(hào)字段為此節(jié)點(diǎn)的序號(hào)后面加上“ ”開(kāi)頭的數(shù)據(jù)記錄。本發(fā)明提供的系統(tǒng)實(shí)施例,應(yīng)用在涉及多個(gè)樹(shù)形結(jié)構(gòu)的系統(tǒng)中可以方便的實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)的定義、存儲(chǔ)以及增刪改查等常用操作,尤其適合在多個(gè)樹(shù)形結(jié)構(gòu)中查詢某棵樹(shù)的某個(gè)節(jié)點(diǎn),類似的操作只需一個(gè)簡(jiǎn)單的查詢即可,提高了數(shù)據(jù)處理的高效性與可靠性。以上所述,僅為本發(fā)明的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求所述的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種樹(shù)形結(jié)構(gòu)中數(shù)據(jù)的處理方法,其特征在于,所有樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)以遞增的數(shù)字進(jìn)行編號(hào),其中每個(gè) 樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)為第一級(jí),深度為i的葉子節(jié)點(diǎn)為第i+Ι級(jí),其中i為大于或等于2的整數(shù),其中同一樹(shù)形結(jié)構(gòu)中深度為i的節(jié)點(diǎn)中同屬于深度為i-Ι的節(jié)點(diǎn)的多個(gè)節(jié)點(diǎn)以遞增的數(shù)字進(jìn)行編號(hào),且樹(shù)形結(jié)構(gòu)上的每個(gè)節(jié)點(diǎn)配置有一個(gè)序號(hào)字段,其中一個(gè)節(jié)點(diǎn)的序號(hào)由該節(jié)點(diǎn)的全部父節(jié)點(diǎn)在各自深度的編號(hào)按照深度從小到大的順序排序而成,其中兩個(gè)父節(jié)點(diǎn)的編號(hào)通過(guò)一預(yù)先設(shè)置的符號(hào)隔開(kāi),其中 采用順序存儲(chǔ)的方式將樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)存儲(chǔ)在數(shù)據(jù)庫(kù)中; 根據(jù)節(jié)點(diǎn)的編號(hào)對(duì)樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行處理。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述預(yù)先設(shè)置的符號(hào)為下劃線。
3.根據(jù)權(quán)利要求I所述的方法,其特征在于,根據(jù)節(jié)點(diǎn)的編號(hào)對(duì)樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行處理,包括 當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行增加節(jié)點(diǎn)操作時(shí),且該節(jié)點(diǎn)為葉子節(jié)點(diǎn),則按照該葉子節(jié)點(diǎn)的位置為該節(jié)點(diǎn)編號(hào),并按照順序存儲(chǔ)方式存儲(chǔ)到數(shù)據(jù)庫(kù);如果該節(jié)點(diǎn)不是葉子節(jié)點(diǎn),則根據(jù)新增節(jié)點(diǎn)處的節(jié)點(diǎn)序號(hào),依次修改該葉子節(jié)點(diǎn)的孩子節(jié)點(diǎn)的父節(jié)點(diǎn)域; 當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行增加樹(shù)操作時(shí),則新增加一個(gè)根節(jié)點(diǎn),并向該新增加的樹(shù)中添加節(jié)點(diǎn)。
4.根據(jù)權(quán)利要求I所述的方法,其特征在于,根據(jù)節(jié)點(diǎn)的編號(hào)對(duì)樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行處理,包括 當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行刪除節(jié)點(diǎn)操作時(shí),刪除該節(jié)點(diǎn)以及所有編號(hào)以節(jié)點(diǎn)的編號(hào)開(kāi)頭的節(jié)點(diǎn); 當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行刪除樹(shù)操作時(shí)刪除所有編號(hào)以此根節(jié)點(diǎn)的編號(hào)開(kāi)頭的節(jié)點(diǎn)。
5.根據(jù)權(quán)利要求I所述的方法,其特征在于,根據(jù)節(jié)點(diǎn)的編號(hào)對(duì)樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行處理,包括 如果是對(duì)所有樹(shù)的遍歷,樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)采用順序存儲(chǔ)的方式存儲(chǔ)在數(shù)據(jù)庫(kù)中,僅進(jìn)行一次查詢,并將查詢結(jié)果按照樹(shù)形結(jié)構(gòu)上的節(jié)點(diǎn)的編號(hào)排序輸出; 如果是對(duì)某棵樹(shù)的遍歷,查詢以根節(jié)點(diǎn)的編號(hào)開(kāi)頭的所有數(shù)據(jù)記錄; 如果查詢某一節(jié)點(diǎn),根據(jù)查詢內(nèi)容直接查詢; 如果查詢某一節(jié)點(diǎn)的父節(jié)點(diǎn),查詢編號(hào)字段為此節(jié)點(diǎn)的父節(jié)點(diǎn)域的節(jié)點(diǎn); 如果查詢某一節(jié)點(diǎn)的孩子節(jié)點(diǎn),查詢編號(hào)字段為此節(jié)點(diǎn)的序號(hào)后面加上“ ”開(kāi)頭的數(shù)據(jù)記錄。
6.一種樹(shù)形結(jié)構(gòu)中數(shù)據(jù)的處理系統(tǒng),其特征在于,所有樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)以遞增的數(shù)字進(jìn)行編號(hào),其中每個(gè)樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)為第一級(jí),深度為i的葉子節(jié)點(diǎn)為第i+Ι級(jí),其中i為大于或等于2的整數(shù),其中同一樹(shù)形結(jié)構(gòu)中深度為i的節(jié)點(diǎn)中同屬于深度為i-Ι的節(jié)點(diǎn)的多個(gè)節(jié)點(diǎn)以遞增的數(shù)字進(jìn)行編號(hào),且樹(shù)形結(jié)構(gòu)上的每個(gè)節(jié)點(diǎn)配置有一個(gè)序號(hào)字段,其中一個(gè)節(jié)點(diǎn)的序號(hào)由該節(jié)點(diǎn)的全部父節(jié)點(diǎn)在各自深度的編號(hào)按照深度從小到大的順序排序而成,其中兩個(gè)父節(jié)點(diǎn)的編號(hào)通過(guò)一預(yù)先設(shè)置的符號(hào)隔開(kāi),其中 存儲(chǔ)裝置,用于采用順序存儲(chǔ)的方式將樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)存儲(chǔ)在數(shù)據(jù)庫(kù)中; 查詢裝置,用于根據(jù)節(jié)點(diǎn)的編號(hào)對(duì)樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行處理。
7.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述預(yù)先設(shè)置的符號(hào)為下劃線。
8.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述處理裝置包括 第一增加模塊,用于當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行增加節(jié)點(diǎn)操作時(shí),且該節(jié)點(diǎn)為葉子節(jié)點(diǎn),則按照該葉子節(jié)點(diǎn)的位置為該節(jié)點(diǎn)編號(hào),并按照順序存儲(chǔ)方式存儲(chǔ)到數(shù)據(jù)庫(kù);如果該節(jié)點(diǎn)不是葉子節(jié)點(diǎn),則根據(jù)新增節(jié)點(diǎn)處的節(jié)點(diǎn)序號(hào),依次修改該葉子節(jié)點(diǎn)的孩子節(jié)點(diǎn)的父節(jié)點(diǎn)域;第二增加模塊,用于當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行增加樹(shù)操作時(shí),則新增加一個(gè)根節(jié)點(diǎn),并向該新增加的樹(shù)中添加節(jié)點(diǎn)。
9.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述處理裝置包括 第一刪除模塊,用于當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行刪除節(jié)點(diǎn)操作時(shí),刪除該節(jié)點(diǎn)以及所有編號(hào)以節(jié)點(diǎn)的編號(hào)開(kāi)頭的節(jié)點(diǎn); 第二刪除模塊,用于當(dāng)對(duì)該樹(shù)形結(jié)構(gòu)進(jìn)行刪除樹(shù)操作時(shí)刪除所有編號(hào)以此根節(jié)點(diǎn)的編號(hào)開(kāi)頭的節(jié)點(diǎn)。
10.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述處理裝置包括 第一查詢裝置,用于如果是對(duì)所有樹(shù)的遍歷,樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)采用順序存儲(chǔ)的方式存儲(chǔ)在數(shù)據(jù)庫(kù)中,僅進(jìn)行一次查詢,并將查詢結(jié)果按照樹(shù)形結(jié)構(gòu)上的節(jié)點(diǎn)的編號(hào)排序輸出; 第二查詢裝置,用于如果是對(duì)某棵樹(shù)的遍歷,查詢以根節(jié)點(diǎn)的序號(hào)開(kāi)頭的所有數(shù)據(jù)記錄; 第三查詢裝置,用于如果查詢某一節(jié)點(diǎn),根據(jù)查詢內(nèi)容直接查詢; 第四查詢裝置,用于如果查詢某一節(jié)點(diǎn)的父節(jié)點(diǎn),查詢編號(hào)字段為此節(jié)點(diǎn)的父節(jié)點(diǎn)域的節(jié)點(diǎn); 第五查詢裝置,用于如果查詢某一節(jié)點(diǎn)的孩子節(jié)點(diǎn),查詢編號(hào)字段為此節(jié)點(diǎn)的序號(hào)后面加上“ ”開(kāi)頭的數(shù)據(jù)記錄。
全文摘要
本發(fā)明提供一種樹(shù)形結(jié)構(gòu)中數(shù)據(jù)的處理方法和系統(tǒng)。所述方法,包括所有樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)以遞增的數(shù)字進(jìn)行編號(hào),其中每個(gè)樹(shù)形結(jié)構(gòu)的根節(jié)點(diǎn)為第一級(jí),深度為i的葉子節(jié)點(diǎn)為第i+1級(jí),其中i為大于或等于2的整數(shù),其中同一樹(shù)形結(jié)構(gòu)中深度為i的節(jié)點(diǎn)中同屬于深度為i-1的節(jié)點(diǎn)的多個(gè)節(jié)點(diǎn)以遞增的數(shù)字進(jìn)行編號(hào),且樹(shù)形結(jié)構(gòu)上的每個(gè)節(jié)點(diǎn)配置有一個(gè)序號(hào)字段,其中一個(gè)節(jié)點(diǎn)的序號(hào)由該節(jié)點(diǎn)的全部父節(jié)點(diǎn)在各自深度的編號(hào)按照深度從小到大的順序排序而成,其中兩個(gè)父節(jié)點(diǎn)的編號(hào)通過(guò)一預(yù)先設(shè)置的符號(hào)隔開(kāi),其中采用順序存儲(chǔ)的方式將樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)存儲(chǔ)在數(shù)據(jù)庫(kù)中;根據(jù)節(jié)點(diǎn)的編號(hào)對(duì)樹(shù)形結(jié)構(gòu)的所有節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行處理。
文檔編號(hào)G06F17/30GK102867059SQ201210350548
公開(kāi)日2013年1月9日 申請(qǐng)日期2012年9月19日 優(yōu)先權(quán)日2012年9月19日
發(fā)明者付正全, 劉成平, 劉正偉 申請(qǐng)人:浪潮(北京)電子信息產(chǎn)業(yè)有限公司