回答編集履歴

3

誤記訂正

2017/11/24 05:27

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -1,4 +1,4 @@
1
- 訂正:最初のコードは再帰ができていなどころか文法エラーでした。訂正してお詫びいたします。
1
+ 訂正:最初のコードは再帰ができていなどころか文法エラーでした。訂正してお詫びいたします。
2
2
 
3
3
 
4
4
 

2

コードコメント訂正

2017/11/24 05:26

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

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

コードを訂正

2017/11/24 04:53

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

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
- BTNode l = search(left); // まず左側の部分木を調べ
27
+ if (left != null) {
22
28
 
23
- if (l != null) {
29
+ BTNode l = left.search(name); // まず左側の部分木を調べ
24
30
 
25
- return l;
31
+ if (l != null) {
26
32
 
27
- } else {
33
+ return l;
28
34
 
29
- return search(right); // なければ右側の部分木を調べる
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