回答編集履歴
3
誤記訂正
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
訂正:最初のコードは再帰ができていな
|
1
|
+
訂正:最初のコードは再帰ができていないどころか文法エラーでした。訂正してお詫びいたします。
|
2
2
|
|
3
3
|
|
4
4
|
|
2
コードコメント訂正
test
CHANGED
@@ -24,29 +24,31 @@
|
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
-
if (left != null) {
|
27
|
+
if (left != null) { // 左側の部分木があるなら
|
28
28
|
|
29
29
|
BTNode l = left.search(name); // まず左側の部分木を調べ
|
30
30
|
|
31
31
|
if (l != null) {
|
32
32
|
|
33
|
-
return l;
|
33
|
+
return l; // 見つかったらそれを返す
|
34
34
|
|
35
35
|
}
|
36
36
|
|
37
37
|
}
|
38
38
|
|
39
|
+
// この時点では左側にないことが確定
|
39
40
|
|
40
41
|
|
41
|
-
if (right != null) {
|
42
42
|
|
43
|
+
if (right != null) { // 右側の部分木があるなら
|
44
|
+
|
43
|
-
return right.search(name); //
|
45
|
+
return right.search(name); // 右側の部分木を調べた結果が本関数の結果
|
44
46
|
|
45
47
|
}
|
46
48
|
|
47
49
|
|
48
50
|
|
49
|
-
return null; //
|
51
|
+
return null; // 右の部分木がなければこれ以上探しようがないので「なし」を返す
|
50
52
|
|
51
53
|
}
|
52
54
|
|
1
コードを訂正
test
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
訂正:最初のコードは再帰ができていな(どころか文法エラー)でした。訂正してお詫びいたします。
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
---
|
6
|
+
|
1
7
|
木構造というのは再帰的に定義されたものなので、その操作には再帰アルゴリズムが一番簡単に実装できると覚えておくとよいかも知れません。アルゴリズムとしての再帰は「関数の本体の中で自分自身を直接・間接に呼び出す」ことだと捉えるとよいと思います。
|
2
8
|
|
3
9
|
|
@@ -18,17 +24,29 @@
|
|
18
24
|
|
19
25
|
|
20
26
|
|
21
|
-
|
27
|
+
if (left != null) {
|
22
28
|
|
23
|
-
|
29
|
+
BTNode l = left.search(name); // まず左側の部分木を調べ
|
24
30
|
|
25
|
-
|
31
|
+
if (l != null) {
|
26
32
|
|
27
|
-
|
33
|
+
return l;
|
28
34
|
|
29
|
-
|
35
|
+
}
|
30
36
|
|
31
37
|
}
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
if (right != null) {
|
42
|
+
|
43
|
+
return right.search(name); // みつからなければ右側の部分木を調べる
|
44
|
+
|
45
|
+
}
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
return null; // 左右になければこの木にはなかったことになる。
|
32
50
|
|
33
51
|
}
|
34
52
|
|