質問編集履歴

2

内容の充実化

2020/10/06 07:26

投稿

grape_ll
grape_ll

スコア83

test CHANGED
File without changes
test CHANGED
@@ -179,3 +179,69 @@
179
179
  1 2 3 4 5 6 7 8 9 10
180
180
 
181
181
  ipathlength:42
182
+
183
+
184
+
185
+ ##追記
186
+
187
+ ```C
188
+
189
+ int ipathR(link h){
190
+
191
+ if(h == NULL) return 0;
192
+
193
+ else {
194
+
195
+ printf("%d %d\n",ipathR(h->l),ipathR(h->r));
196
+
197
+ return 1 + ipathR(h->l) + ipathR(h->r);
198
+
199
+ }
200
+
201
+ }
202
+
203
+
204
+
205
+ int STipathlength(){ return ipathR(head); }
206
+
207
+ ```
208
+
209
+ 関数の中を以下のようにしてどのような値で動いているのかを見たのですが結果が以下のようになってしまい,
210
+
211
+ 0 0
212
+
213
+ がなぜこんなに多く表示されるのかわからないです.
214
+
215
+
216
+
217
+ (結果)
218
+
219
+ ./STtest 2 2
220
+
221
+ 0 0
222
+
223
+ 0 0
224
+
225
+ 1 1
226
+
227
+ 0 0
228
+
229
+ 0 0
230
+
231
+ 0 0
232
+
233
+ 1 3
234
+
235
+ 0 0
236
+
237
+ 0 0
238
+
239
+ 0 0
240
+
241
+ 1 1
242
+
243
+ 0 0
244
+
245
+ 0 0
246
+
247
+ ipathlength:5

1

内容の充実化

2020/10/06 07:26

投稿

grape_ll
grape_ll

スコア83

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  C言語で二分探索木を実装しました.
2
2
 
3
- ここで内部道長を,木の内部節点のレベルの総和とします.このとき,以下のようなコードを書いたのですが,これはうまく実装できているでしょうか.
3
+ ここで内部道長を,木の内部節点のレベルの総和とします.また,根のレベルを0とします.このとき,以下のようなコードを書いたのですが,~~これはうまく実装できているでしょうか.~~結果が正しいものとはなりませんでした.1~10を昇順で入れたときには総和は45になると思うのですが42と表示されています.これは再帰のどこが原因で発生しているのでしょうか.
4
4
 
5
5
  いくつかのファイルを用いて行っています.
6
6
 
@@ -18,13 +18,17 @@
18
18
 
19
19
  typedef struct STnode* link;
20
20
 
21
+ struct STnode {
22
+
21
- struct STnode { Item item; link l, r; int N; };
23
+ Item item; link l, r; int N;
24
+
25
+ };
22
26
 
23
27
  static link head, z;
24
28
 
25
- link NEW(Item item, link l, link r, int N)
29
+ link NEW(Item item, link l, link r, int N){
26
30
 
27
- { link x = malloc(sizeof *x);
31
+ link x = malloc(sizeof *x);
28
32
 
29
33
  x->item = item; x->l = l; x->r = r; x->N = N;
30
34
 
@@ -38,11 +42,15 @@
38
42
 
39
43
  }
40
44
 
41
- int STcount(void) { return head->N; }
45
+ int STcount(void) {
42
46
 
43
- Item searchR(link h, Key v)
47
+ return head->N;
44
48
 
49
+ }
50
+
51
+ Item searchR(link h, Key v){
52
+
45
- { Key t = key(h->item);
53
+ Key t = key(h->item);
46
54
 
47
55
  if (h == z) return NULLitem;
48
56
 
@@ -54,11 +62,15 @@
54
62
 
55
63
  }
56
64
 
57
- Item STsearch(Key v) { return searchR(head, v); }
65
+ Item STsearch(Key v) {
58
66
 
59
- link insertR(link h, Item item)
67
+ return searchR(head, v);
60
68
 
69
+ }
70
+
71
+ link insertR(link h, Item item){
72
+
61
- { Key v = key(item), t = key(h->item);
73
+ Key v = key(item), t = key(h->item);
62
74
 
63
75
  if (h == z) return NEW(item, z, z, 1);
64
76
 
@@ -72,9 +84,11 @@
72
84
 
73
85
  }
74
86
 
75
- void STinsert(Item item)
87
+ void STinsert(Item item){
76
88
 
77
- { head = insertR(head, item); }
89
+ head = insertR(head, item);
90
+
91
+ }
78
92
 
79
93
  int ipathR(link h){
80
94
 
@@ -86,7 +100,11 @@
86
100
 
87
101
 
88
102
 
89
- int STipathlength(){ return ipathR(head); }
103
+ int STipathlength(){
104
+
105
+ return ipathR(head);
106
+
107
+ }
90
108
 
91
109
 
92
110