27秋午後問3

Gonbeiさん  
(No.1)
javaでclass Nodeをつくりました。
図3の関数addNodeもついています。

class Node {
    int key;
    Node left;
    Node right;
    
    Node addNode(int k,Node p){
      if(p.key == 0) {
          p.key = k;
      } else if(k != p.key){
          if(k < p.key){
              p.left = addNode(k,new Node());
          } else {
              p.right = addNode(k,new Node());
          }
      }
      return p;
    }
}
図1にならって下記のテストクラスを実行すると、
class AP27akiTest {
    public static void main(String[] args){
        Node n = new Node();
        n = n.addNode(15,n);
        n = n.addNode(8,n);
        n = n.addNode(25,n);
        System.out.println(n.key);
        System.out.println(n.left.key);
        System.out.println(n.right.key);
    }
}
出力は、
15

25
と表示されました。
次に2と20も追加して実行すると、
class AP27akiTest {
    public static void main(String[] args){
        Node n = new Node();
        n = n.addNode(15,n);
        n = n.addNode(8,n);
        n = n.addNode(25,n);
        n = n.addNode(2,n);
        n = n.addNode(20,n);
        System.out.println(n.key);
        System.out.println(n.left.key);
        System.out.println(n.right.key);
        System.out.println(n.left.left.key);
        System.out.println(n.right.left.key);
    }
}
出力は、
15

20
とNullPointerExceptionが表示されました。
8と25の次にNodeが生成されずに上書きされています。
なぜでしょう?
2016.03.06 04:31
0.05%さん 
(No.2)
ご提示されてるコードには探索部分が無いので、ただの2分木ですね。
2016.04.02 04:46

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop