樹型結構的物件除重

2021-10-02 19:39:42 字數 1855 閱讀 6273

在建樹之前,對資料來源進行處理。

首先根據該線性表的id(string)進行排序,排序後遍歷該錶刪除id開頭相同的節點,保留id長度最長的節點。如「11」,「1101」,「110101」,只保留最後的「110101」這個節點,其他節點刪除。字串長度越短,則等級越小,屬於祖父節點,字串越長,等級越大,屬於子節點,最大的為葉節點。排序後的結果如下圖:

因為在建樹的時候會根據id查詢它的父節點,祖父節點以及它所有下屬子節點,然後再建樹。

@override

public defaultzone getdefaultzone

(integer customerid)

i++;}

distinctzones.

add(zones.

get(i-1)

);zones = distinctzones;

//建樹,返回最終的結果

if(zones != null && zones.

size()

>0)

defaultzone result =

newdefaultzone

(zone, regions.

toarray

(new

region

[regions.

size()

]));

return result;

}else

}

按照字串大小順序排序完的線性表如下表

即是只要等級最高的祖父節點,同等長度的則只要相同名父節點乙個。如上圖劃紅線是所要的資料。北京一列,就是以11開頭,只要北京(**為11,最短)。江蘇省一列,沒有江蘇省,則在江蘇省下的***市除重名,只要以3211,3212開頭的各乙個。主要有這兩種情況。

@override

public defaultzone getdefaultzone

(integer customerid)

int sub=rid1.

length()

>

2?rid1.

length()

-2:2

;if(rid.

startswith

(lastregionid)

&&rl<=level&&count==0)

elseif(

!rid1.

startswith

(lastregionid.

substring(0

,2))

)if(rid1.

length()

>2)

}}zones = distinctzones;

if(zones != null && zones.

size()

>0)

defaultzone result =

newdefaultzone

(zone, regions.

toarray

(new

region

[regions.

size()

]));

return result;

}else

}private region findregionontree

(list

regions, string regionid)

return null;

}

樹型結構的設計

最近做專案,經常用的樹型結構,對樹型表的設計有了新的理解.原來設計的樹型表結構 體現了一種遍歷的方式.用編碼控制相應的父子關係,雖然這樣也體現了關係,但在做轉移子樹時就相當麻煩了,而且邏輯關係也不清晰.這次的設計 改用父節點控制父子關係,同時提供乙個排序號,提供一種遍歷,可以增加多個字段,來擴充套件...

Trie樹 高階樹型結構

trie樹應用 trie 樹中文名叫字典樹 字首樹等等。這些名字暗示其與字元的處理有關,事實也確實如此,它主要用途就是將字串 當然也可以不限於字串 整合成樹形。它的核心思想就是通過最大限度地減少無謂的字串比較,使得查詢高效率,即 用空間換時間 再利用共同字首來提高查詢效率。典型應用於統計和排序大量的...

樹型表結構的查詢

connect by 是結構化查詢中用到的,其基本語法是 select from tablename start by cond1 connect by cond2 where cond3 簡單說來是將乙個樹狀結構儲存在一張表裡,比如乙個表中存在兩個字段 id,parentid那麼通過表示每一條記錄...