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
8
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
2
20
とNullPointerExceptionが表示されました。
8と25の次に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
8
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
2
20
とNullPointerExceptionが表示されました。
8と25の次にNodeが生成されずに上書きされています。
なぜでしょう?
2016.03.06 04:31
0.05%さん
(No.2)
ご提示されてるコードには探索部分が無いので、ただの2分木ですね。
2016.04.02 04:46
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。