2016-06-12 14 views
1

これは、n個のノードにPoint(x、y)タイプのオブジェクトを含むBSTを実装しました。ツリー内の順序はXの値に従います。BST検索problen

Iは入力として、Xの範囲取得(Xの左、右x)関数 を実装する必要があり、出力が (EDIT)ある:範囲内のYの座標の和は、(付属します)。

すべてのノードを「歩いて」いることはそれほど難しくありませんが、問題はO(logn)の複雑さでそれを行うことです。

私は範囲とYの合計のフィールドを初期化することについて考えましたが、何とか挿入と削除の機能ではうまくいきません。 アイデア?

+0

私は 'O(log n + | right-left |)'を意味していると確信しています。 – Bergi

+0

また、すべてのポイントに合計を累積し、すべてのノードにキャッシュすることができます。その結果、エッジの部分だけを見て範囲の合計をすばやく見つけることができます。 – Bergi

答えて

0

範囲の各端を見つけることは、O(log n)の複雑さです。ツリー内のすべてのノードを見る必要はありません。

範囲の数値を合計する必要がある場合は、高境界から低境界を引いた値(連続した直線範囲を想定します)は、一定の時間操作です。

関連する問題