區間搜索問題就是給定一系列區間,和一個待測區間,求與待測區間相交的區間。
為了解決這個問題,需要專門編寫一個類,這個類的接口如下:
public interface IntervalST, Value> { void put(Key lo, Key hi, Value value); Value get(Key lo, Key hi) void delete(Key lo, Key hi) Iterable intersect(Key lo, Key hi); }
每個節點中有兩個值,第一個值是區間的起點和終點,第二個值是該節點以及子節點中最大的區間終點。為了簡化問題,將二叉樹以區間起點作為關鍵字。
<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+CrLlyOvH+LzktcTKsbryo6y4+b7dxtXNqLb+subK97XEuebU8r340NCy5cjro6zU2rLlyOvN6rPJ1q6689Do0qq4/NDCy/nT0Li4vdq147XE1+6089PSx/i85KGjPC9wPgo8cD4KPGJyPgo8L3A+CjxoMT6y6dXSstnX9zxicj4KPC9oMT4KPHA+Cjxicj4KPC9wPgo8cD4KsunV0rLZ1/fQ6NKq1rTQ0NK7z8Kyvdboo7o8L3A+Cjx1bCBjbGFzcz0=" list-paddingleft-2">
如果當前節點與被搜索的區間有交集,返回當前節點
如果左子節點是空的,向右側深入
如果整個區間在當前節點的左側,向左側深入
其余情況向右側深入
所有操作的復雜度均為logN。