2012-04-27 3 views
1

ここはインターバルツリーをトラバースするために書いた関数です。私はそれがいくつかのノードを訪問することに失敗したことに気付く。コードがかなり明確であると仮定すると、どこが失敗するかを知りたい。インターバルツリーのトラバーサル

public boolean searchTree(Node node,int x) 
{ 

      while(node!=null&&!node.getInterval().containsPoint(x)) 
      { 
       if(node.getNodeLeft()!=null&&(node.getNodeLeft().getMax()>=x)) 
       { 
        node=node.getNodeLeft(); 
       } 
       else 
       { 
        node=node.getNodeRight(); 
       }  
      } 
      return node!=null; 
} 
+2

からですので、私はあなたがそれをデバッグしようとしたことがあり、区間木が何であったか知りませんでしたか? (また、コード内のスペースを修正しました。スペースとタブが混在していましたので、フォーマットが正しいかどうかを確認するためにプレビューを確認してください) – huon

+0

ツリーの構造そのものは、すべき? –

+0

**はどこに出ていますか? – pengdu

答えて

0

ツリー内のノードは、ポイント、たとえばpの中心に配置されています。 左のサブツリーにはpの左にあるすべての間隔が含まれ、右のサブツリーにはpの右にあるすべての間隔が含まれます。ノード自体には、pと重なるすべての間隔が含まれます。

x < pの場合、xを含む左のサブツリーからの間隔があるかもしれませんが、x(とp)を含むノード自体からの間隔もあるかもしれません。唯一の保証は、右のサブツリーにxを含む区間が含まれないことです。

ノード自体にこれらの間隔がありません。

私inderstandingがここhttp://en.wikipedia.org/wiki/Interval_tree

+0

アルゴリズムの概要は、区間木について話す章を持っています。 – pengdu

+0

Petar Ivanov、私はCentered interval tree designに基づいて答えを出すと思います。私のデザインは、Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest、Clifford Steinによるアルゴリズム紹介入門書に示されています。 –

関連する問題