資料結構 線段樹 線段樹的定義與構造

2021-07-28 22:28:34 字數 961 閱讀 9949

一、什麼是線段樹?

1、線段樹是一棵二叉樹,樹中的每乙個結點表示了乙個區間[a,b]。

2、每乙個葉子節點表示的是乙個單位區間。

3、根節點表示的是「整體」的區間。

4、對於每乙個非葉結點所表示的區間[a,b]:

左兒子表示的區間為[a,(a+b)/2]

右兒子表示的區間為[(a+b)/2+1,b]

二、線段樹有什麼用?

線段樹主要用於處理一些關於區間對映的問題。

我們需要經常處理可以對映在乙個座標軸上的一些固定線段。

由於線段是可以互相覆蓋的,有時需要動態地合併線段,例如取得並區間的總長度,或者並區間的個數等等。

乙個線段是對應於乙個區間的,因此線段樹也可以叫做區間樹。

三、線段樹的結構

如圖:(每乙個節點表示乙個區間)

也可以這樣表示:

我們現在知道了線段樹的結構,那應該怎麼定義一棵線段樹呢?

很簡單,可以直接定義乙個結構體陣列:

struct nodetree[maxn];

線段樹的每個節點上往往都增加了一些其他的域。

在這些域中儲存了某種動態維護的資訊,視不同情況而定。

這些域使得線段樹具有極大的靈活性,可以適應不同的需求。

四、線段樹的表示方法

其實線段樹的表示方法跟完全二叉樹的表示方法是一樣的,只不過完全二叉樹的節點是滿的,兩個節點之間沒有空節點,線段樹的兩個節點之間可能存在空節點,所以線段樹比較耗空間,一般空間都要開到4n左右。

當然,線段樹也可以用動態資料結構來表示(比如說指標),但是寫起來比較麻煩,而且容易寫錯,所以一般都用完全二叉樹的方法來表示。

資料結構 線段樹

啦啦啦啦啦啦線段樹是個好東西 好吧並沒有什麼好的 但貌似還是很好啊 線段樹就是一棵樹!顧名思義 又是這個詞 就是求關於一段的某些什麼什麼東西。比如區間最大值啊什麼的。引用百科知識 線段樹是一種二叉搜尋樹,與區間樹相似,它將乙個區間劃分成一些單元區間,每個單元區間對應線段樹中的乙個葉結點。對於線段樹中...

資料結構 線段樹

一 目標 1.如何快速的查詢出下列陣列arr 2,5 的和 2。以及更新arr 4 為6。用普通的方法查詢的複雜度為o n 更新的複雜度為o 1 這時候我們可以用線段樹來快速完成這些操作,複雜度為logn。二 內容 如何建立,查詢,更新線段樹。public class qurqpd int tree...

資料結構 線段樹

線段樹是一顆平衡的二叉搜尋樹,他以空間換區時間,讓線性查詢加速log級別的查詢,用到的演算法主要是二分搜尋和遞迴。例如 有陣列data 我有乙個需求,我需要頻繁的查詢區間i j的sum和。這裡先給出兩個解決方案 如果使用最普通的演算法遍歷,那麼查詢和更新的複雜度為o n 當然你還可以使用動態規劃,定...