專利名稱:一種樹狀結(jié)構(gòu)節(jié)點的排序方法、裝置及查詢系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)據(jù)結(jié)構(gòu)領(lǐng)域,尤其涉及一種樹狀結(jié)構(gòu)節(jié)點的排序方法、裝置及查詢系統(tǒng)。
背景技術(shù):
樹狀結(jié)構(gòu)是指數(shù)據(jù)庫中一個數(shù)據(jù)集合以及在該集合上存在的一種關(guān)系。集合中的各個元素稱為樹的節(jié)點,而集合上各個節(jié)點存在的關(guān)系稱為父子關(guān)系, 該父子關(guān)系在樹的節(jié)點之間建立了一個層次結(jié)構(gòu)。集合中通常包含多棵樹狀結(jié)構(gòu),集合中的一級節(jié)點對應(yīng)樹的根節(jié)點,不同一級節(jié)點之間沒有直接的關(guān)系,只有一定的排列順序。現(xiàn)有的構(gòu)建樹狀結(jié)構(gòu)排序的過程中,首先從每一個一級節(jié)點開始,采用遞歸查詢的方式遍歷其下所有層次的子節(jié)點記錄,再根據(jù)該子節(jié)點記錄將相應(yīng)的子節(jié)點排列在最終序列的正確位置上。如采用先序遍歷的方式遍歷一個一級節(jié)點所有層次的子節(jié)點記錄,由于該先序遍歷首先訪問根節(jié)點然后遍歷左子樹,最后遍歷右子樹,因此第一次數(shù)據(jù)庫查詢操作首先獲得根節(jié)點的記錄數(shù)據(jù),若該根節(jié)點的記錄數(shù)據(jù)表明該根節(jié)點存在左右兩個子節(jié)點,再根據(jù)該根節(jié)點的記錄數(shù)據(jù)將該根節(jié)點的左節(jié)點排列在該一級節(jié)點的左邊,繼續(xù)執(zhí)行第二次數(shù)據(jù)庫查詢操作,若獲得的左節(jié)點記錄數(shù)據(jù)表明該左節(jié)點沒有子節(jié)點,則將該根節(jié)點的右節(jié)點排列在該根節(jié)點的右邊。當然,若根節(jié)點存在多個子節(jié)點,則同樣需要多次數(shù)據(jù)庫查詢操作才能構(gòu)建樹。由于一次數(shù)據(jù)庫查詢只能取得樹的一個節(jié)點數(shù)據(jù),因此,使用該方法構(gòu)建一棵Q層樹狀結(jié)構(gòu)的排序需要執(zhí)行多次數(shù)據(jù)庫操作,多次數(shù)據(jù)遍歷才能將樹的所有節(jié)點排列在最終序列的正確位置上,影響了數(shù)據(jù)庫的性能,并且,隨著樹狀結(jié)構(gòu)層次Q數(shù)值的增長,多級葉子節(jié)點排序的時間開銷增大,不利于后期的樹層次數(shù)Q的擴展。
發(fā)明內(nèi)容
本發(fā)明實施例提供了一種樹狀結(jié)構(gòu)節(jié)點的排序方法,旨在解決現(xiàn)有的構(gòu)建樹狀結(jié)構(gòu)的排序存在的影響數(shù)據(jù)庫性能以及難以擴展的問題。本發(fā)明實施例是這樣實現(xiàn)的,一種樹狀結(jié)構(gòu)節(jié)點的排序方法,所述方法包括下述步驟獲取組成樹的所有節(jié)點的節(jié)點數(shù)據(jù),所述節(jié)點數(shù)據(jù)包括節(jié)點所在樹狀結(jié)構(gòu)的層數(shù)、所述節(jié)點的父節(jié)點、所述節(jié)點的子節(jié)點的個數(shù);對組成樹的所有節(jié)點進行唯一標識,所述標識用于唯一標識所述組成樹的所有節(jié)占.根據(jù)所述節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識對樹的所有節(jié)點進行排序;保存所述節(jié)點數(shù)據(jù)以及所述節(jié)點的唯一標識。本發(fā)明實施例的另一目的在于提供一種樹狀結(jié)構(gòu)節(jié)點的排序裝置,所述裝置包括節(jié)點數(shù)據(jù)獲取單元,用于獲取組成樹的所有節(jié)點的節(jié)點數(shù)據(jù),所述節(jié)點數(shù)據(jù)包括節(jié)點所在樹狀結(jié)構(gòu)的層數(shù)、所述節(jié)點的父節(jié)點、所述節(jié)點的子節(jié)點的個數(shù);節(jié)點標識單元,用于對組成樹的所有節(jié)點進行唯一標識,所述標識用于唯一標識所述組成樹的所有節(jié)點;節(jié)點排序單元,用于根據(jù)所述節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識對樹的所有節(jié)點進行排序;節(jié)點數(shù)據(jù)保存單元,用于保存所述節(jié)點數(shù)據(jù)以及所述節(jié)點的唯一標識。本發(fā)明實施例的另一目的在于提供一種包括上述樹狀結(jié)構(gòu)節(jié)點的排序裝置的查詢系統(tǒng)。本發(fā)明實施例獲取樹的所有節(jié)點數(shù)據(jù),并對該樹的所有節(jié)點進行唯一標識,根據(jù)該所有節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識對樹的所有節(jié)點進行排序,再將排序后的節(jié)點數(shù)據(jù)以·及節(jié)點的唯一標識保存在包括記錄節(jié)點數(shù)據(jù)的字段的列表中。遍歷一次該列表,就能夠獲取各個節(jié)點的節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識,進而根據(jù)獲取的節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識能夠正確構(gòu)建樹。由于只需一次列表數(shù)據(jù)遍歷操作,就能將所有節(jié)點排在正確的位置上,因此保證了數(shù)據(jù)庫性能的穩(wěn)定,并且,該方法在不增加開銷的情況下也能夠支持多級樹狀結(jié)構(gòu)的自由擴展,增強實用性。
圖I是本發(fā)明第一實施例提供的樹狀結(jié)構(gòu)節(jié)點的排序方法流程圖;圖2是本發(fā)明第一實施例提供的樹狀結(jié)構(gòu)圖;圖3是本發(fā)明第二實施例提供的樹狀結(jié)構(gòu)節(jié)點的排序方法流程圖;圖4是本發(fā)明第三實施例提供的樹狀結(jié)構(gòu)節(jié)點的排序裝置的結(jié)構(gòu)圖。
具體實施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。本發(fā)明實施例獲取樹的所有節(jié)點數(shù)據(jù),并對該樹的所有節(jié)點進行唯一標識,根據(jù)該節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識對樹的所有節(jié)點進行排序,再保存該節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識。本發(fā)明實施例提供了一種樹狀結(jié)構(gòu)節(jié)點的排序方法、裝置及查詢系統(tǒng)。所述方法包括獲取組成樹的所有節(jié)點的節(jié)點數(shù)據(jù),所述節(jié)點數(shù)據(jù)包括節(jié)點所在樹狀結(jié)構(gòu)的層數(shù)、所述節(jié)點的父節(jié)點、所述節(jié)點的子節(jié)點的個數(shù);對組成樹的所有節(jié)點進行唯一標識,所述標識用于唯一標識所述組成樹的所有節(jié)占.根據(jù)所述節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識對樹的所有節(jié)點進行排序;保存所述節(jié)點數(shù)據(jù)以及所述節(jié)點的唯一標識。所述裝置包括節(jié)點數(shù)據(jù)獲取單元,用于獲取組成樹的所有節(jié)點的節(jié)點數(shù)據(jù),所述節(jié)點數(shù)據(jù)包括節(jié)點所在樹狀結(jié)構(gòu)的層數(shù)、所述節(jié)點的父節(jié)點、所述節(jié)點的子節(jié)點的個數(shù);節(jié)點標識單元,用于對組成樹的所有節(jié)點進行唯一標識,所述標識用于唯一標識所述組成樹的所有節(jié)點;節(jié)點排序單元,用于根據(jù)所述節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識對樹的所有節(jié)點進行排序;節(jié)點數(shù)據(jù)保存單元,用于保存所述節(jié)點數(shù)據(jù)以及所述節(jié)點的唯一標識。所述系統(tǒng)包括包括上述樹狀結(jié)構(gòu)節(jié)點的排序裝置的查詢系統(tǒng)。本發(fā)明實施例獲取樹的所有節(jié)點數(shù)據(jù),并對該樹的所有節(jié)點進行唯一標識,根據(jù)該所有節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識對樹的所有節(jié)點進行排序,再將排序后的節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識保存在包括記錄節(jié)點數(shù)據(jù)的字段的列表中。遍歷一次該列表,就能夠獲取各個節(jié)點的節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識,進而根據(jù)獲取的節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識能夠正確構(gòu)建樹。由于只需一次列表數(shù)據(jù)遍歷操作,就能將所有節(jié)點排在正確的位置上, 因此保證了數(shù)據(jù)庫性能的穩(wěn)定,并且,該方法在不增加開銷的情況下也能夠支持多級樹狀結(jié)構(gòu)的自由擴展,增強實用性。為了說明本發(fā)明所述的技術(shù)方案,下面通過具體實施例來進行說明。實施例一:圖I示出了本發(fā)明第一實施例提供的樹狀結(jié)構(gòu)構(gòu)建方法流程,詳述如下在步驟Sll中,獲取組成樹的所有節(jié)點的節(jié)點數(shù)據(jù),該節(jié)點數(shù)據(jù)包括節(jié)點所在樹狀結(jié)構(gòu)的層數(shù)、該節(jié)點的父節(jié)點、該節(jié)點的子節(jié)點的個數(shù)。獲取組成樹的所有節(jié)點的節(jié)點數(shù)據(jù),假設(shè)樹狀結(jié)構(gòu)有3層,如圖2所示。第一層的節(jié)點為一級節(jié)點,有A節(jié)點、B節(jié)點和C節(jié)點,第二層的節(jié)點為二級節(jié)點,第二層的節(jié)點為Al節(jié)點、A2節(jié)點、BI節(jié)點以及B2節(jié)點,第三層的節(jié)點為Al I節(jié)點、A12節(jié)點、A21節(jié)點、A22節(jié)點,上述節(jié)點的創(chuàng)建時間依次靠后,A節(jié)點最早創(chuàng)建,而A22節(jié)點最遲創(chuàng)建。查詢并獲取組成樹中各個節(jié)點的節(jié)點數(shù)據(jù),如獲取節(jié)點所在樹狀結(jié)構(gòu)的層數(shù)、該節(jié)點的父節(jié)點、該節(jié)點的子節(jié)點以及該節(jié)點的子節(jié)點的個數(shù)等節(jié)點數(shù)據(jù),在步驟S12中,對組成樹的所有節(jié)點進行唯一標識,該標識用于唯一標識組成樹的所有節(jié)點。在獲取了組成樹的所有節(jié)點的節(jié)點數(shù)據(jù)之后,再對該樹的所有節(jié)點進行唯一標識,該唯一標識用于唯一標識樹的節(jié)點,一個節(jié)點的唯一標識對應(yīng)于一個樹的節(jié)點。比如可以用節(jié)點的創(chuàng)建時間作為一個節(jié)點的唯一標識。在步驟S13中,根據(jù)該節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識對樹的所有節(jié)點進行排序。其中,根據(jù)該節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識對樹的所有節(jié)點進行排序。的步驟具體為將一級節(jié)點根據(jù)該一級節(jié)點的唯一標識排列在最終位置上;如,將一個一級節(jié)點根據(jù)該節(jié)點的唯一標識排列在最終序列的第一個位置上;若還存在其他一級節(jié)點,則將該一級節(jié)點根據(jù)該一級節(jié)點的唯一標識排列在上一個一級節(jié)點所在位置后的第M+1個位置上,該M值等于上一個一級節(jié)點的子節(jié)點個數(shù),M大于等于O ;按照上述的排列方法依次將剩余的一級節(jié)點排列在最終序列的位置上。以步驟Sll中的樹節(jié)點為例,將該樹的一級節(jié)點按該一級節(jié)點所在樹的層數(shù)以及該一級節(jié)點的創(chuàng)建時間進行排序的結(jié)果如表I所示表I :
權(quán)利要求
1.一種樹狀結(jié)構(gòu)節(jié)點的排序方法,其特征在于,所述方法包括下述步驟 獲取組成樹的所有節(jié)點的節(jié)點數(shù)據(jù),所述節(jié)點數(shù)據(jù)包括節(jié)點所在樹狀結(jié)構(gòu)的層數(shù)、所述節(jié)點的父節(jié)點、所述節(jié)點的子節(jié)點的個數(shù); 對組成樹的所有節(jié)點進行唯一標識,所述標識用于唯一標識所述組成樹的所有節(jié)點; 根據(jù)所述節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識對樹的所有節(jié)點進行排序; 保存所述節(jié)點數(shù)據(jù)以及所述節(jié)點的唯一標識。
2.如權(quán)利要求I所述的方法,其特征在于,根據(jù)所述節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識對樹的所有節(jié)點進行排序的步驟具體為 將一級節(jié)點根據(jù)所述一級節(jié)點的唯一標識排列在最終位置上; 將二級節(jié)點至N-I級節(jié)點根據(jù)所述二級節(jié)點的父節(jié)點以及所述二級節(jié)點的唯一標識至所述N-I級節(jié)點的父節(jié)點以及所述N-I級節(jié)點的唯一標識排列在最終位置上,所述N為樹狀結(jié)構(gòu)的總層數(shù); 將N級節(jié)點根據(jù)所述N級節(jié)點的父節(jié)點以及所述N級節(jié)點的唯一標識排列在最終位置上。
3.如權(quán)利要求2所述的方法,其特征在于,所述將一級節(jié)點根據(jù)節(jié)點的唯一標識排列在最終位置上的步驟具體為 將一個一級節(jié)點根據(jù)所述節(jié)點的唯一標識排列在最終序列的第一個位置上; 若還存在其他一級節(jié)點,則將所述一級節(jié)點根據(jù)所述一級節(jié)點的唯一標識排列在上一個一級節(jié)點所在位置后的第M+1個位置上,所述M值等于上一個一級節(jié)點的子節(jié)點個數(shù),M大于等于O; 按照上述的排列方法依次將剩余的一級節(jié)點排列在最終序列的位置上。
4.如權(quán)利要求I所述的方法,其特征在于,在保存所述節(jié)點數(shù)據(jù)以及所述節(jié)點的唯一標識的步驟之后進一步包括下述步驟 查詢所述節(jié)點數(shù)據(jù)以及所述節(jié)點的唯一標識; 根據(jù)所述節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識構(gòu)建樹。
5.如權(quán)利要求4所述的方法,其特征在于,所述根據(jù)所述節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識構(gòu)建樹的步驟具體為 根據(jù)一級節(jié)點的唯一標識構(gòu)建樹的第一層; 根據(jù)二級節(jié)點的唯一標識以及所述二級節(jié)點的父節(jié)點構(gòu)建樹的第二層; 根據(jù)上述構(gòu)建樹的方法依次構(gòu)建樹的第三層至第N層,所述N為樹狀結(jié)構(gòu)的總層數(shù)。
6.一種樹狀結(jié)構(gòu)節(jié)點的排序裝置,其特征在于,所述裝置包括 節(jié)點數(shù)據(jù)獲取單元,用于獲取組成樹的所有節(jié)點的節(jié)點數(shù)據(jù),所述節(jié)點數(shù)據(jù)包括節(jié)點所在樹狀結(jié)構(gòu)的層數(shù)、所述節(jié)點的父節(jié)點、所述節(jié)點的子節(jié)點的個數(shù); 節(jié)點標識單元,用于對組成樹的所有節(jié)點進行唯一標識,所述標識用于唯一標識所述組成樹的所有節(jié)點; 節(jié)點排序單元,用于根據(jù)所述節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識對樹的所有節(jié)點進行排序; 節(jié)點數(shù)據(jù)保存單元,用于保存所述節(jié)點數(shù)據(jù)以及所述節(jié)點的唯一標識。
7.如權(quán)利要求6所述的裝置,其特征在于,所述節(jié)點排序單元包括一級節(jié)點排列模塊,用于將一級節(jié)點根據(jù)所述一級節(jié)點的唯一標識排列在最終位置上; 中間節(jié)點排列模塊,用于將二級節(jié)點至N-I級節(jié)點根據(jù)所述二級節(jié)點的父節(jié)點以及所述二級節(jié)點的唯一標識至所述N-I級節(jié)點的父節(jié)點以及所述N-I級節(jié)點的唯一標識排列在最終位置上,所述N為樹狀結(jié)構(gòu)的總層數(shù); 葉子節(jié)點排列模塊,用于將N級節(jié)點根據(jù)所述N級節(jié)點的父節(jié)點以及所述N級節(jié)點的唯一標識排列在最終位置上。
8.如權(quán)利要求7所述的裝置,其特征在于,所述一級節(jié)點排列模塊包括 第一一級節(jié)點排列模塊,用于將一個一級節(jié)點根據(jù)所述節(jié)點的唯一標識排列在最終序列的第一個位置上; 中間一級節(jié)點排列模塊,用于在存在其他一級節(jié)點時,將所述一級節(jié)點根據(jù)所述一級節(jié)點的唯一標識排列在上一個一級節(jié)點所在位置后的第M+1個位置上,所述M值等于上一個一級節(jié)點的子節(jié)點個數(shù),M大于等于O ; 剩余一級節(jié)點排列模塊,用于按照上述的排列方法依次將剩余的一級節(jié)點排列在最終序列的位置上。
9.如權(quán)利要求6所述的裝置,其特征在于,所述裝置還包括 節(jié)點數(shù)據(jù)查詢單元,獲取所述節(jié)點數(shù)據(jù)以及所述節(jié)點的唯一標識; 構(gòu)建樹單元,用于根據(jù)所述節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識構(gòu)建樹。
10.一種包括6-9任一項權(quán)利要求所述的樹狀結(jié)構(gòu)節(jié)點的排序裝置的查詢系統(tǒng)。
全文摘要
本發(fā)明適用于數(shù)據(jù)結(jié)構(gòu)領(lǐng)域,提供了一種樹狀結(jié)構(gòu)節(jié)點的排序方法、裝置及查詢系統(tǒng)。所述方法包括步驟獲取組成樹的所有節(jié)點的節(jié)點數(shù)據(jù),所述節(jié)點數(shù)據(jù)包括節(jié)點所在樹狀結(jié)構(gòu)的層數(shù)、所述節(jié)點的父節(jié)點、所述節(jié)點的子節(jié)點的個數(shù);對組成樹的所有節(jié)點進行唯一標識,所述標識用于唯一標識所述組成樹的所有節(jié)點;根據(jù)所述節(jié)點數(shù)據(jù)以及節(jié)點的唯一標識對樹的所有節(jié)點進行排序;保存所述節(jié)點數(shù)據(jù)以及所述節(jié)點的唯一標識。本發(fā)明實施例只需一次列表數(shù)據(jù)遍歷操作,就能將所有節(jié)點排在正確的位置上,因此保證了數(shù)據(jù)庫性能的穩(wěn)定,并且,該方法在不增加開銷的情況下也能夠支持多級樹狀結(jié)構(gòu)的自由擴展,增強實用性。
文檔編號G06F17/30GK102841891SQ201110167198
公開日2012年12月26日 申請日期2011年6月21日 優(yōu)先權(quán)日2011年6月21日
發(fā)明者黃慶林 申請人:金蝶軟件(中國)有限公司