回答編集履歴

9

文意の修正

2021/11/10 12:58

投稿

Egg-Man
Egg-Man

スコア38

test CHANGED
@@ -13,6 +13,12 @@
13
13
  tree_node_t *p = n;
14
14
 
15
15
  int i = 0;
16
+
17
+
18
+
19
+ if(p==NULL)
20
+
21
+ return p;
16
22
 
17
23
 
18
24
 
@@ -76,19 +82,19 @@
76
82
 
77
83
 
78
84
 
79
- if (n==NULL) {
85
+ if(n==NULL) {
80
86
 
81
87
  n = create_node(val);
82
88
 
83
89
  }
84
90
 
85
- else if (val < n->data) {
91
+ else if(val < n->data) {
86
92
 
87
93
  n->left = tree_insert_uniq(n->left, val);
88
94
 
89
95
  }
90
96
 
91
- else {
97
+ else if(val > n->data) {
92
98
 
93
99
  n->right = tree_insert_uniq(n->right, val);
94
100
 

8

書式の改善

2021/11/10 12:58

投稿

Egg-Man
Egg-Man

スコア38

test CHANGED
@@ -1,10 +1,8 @@
1
1
  ### 以下に、「再帰を用いる場合」と「再帰を用いない場合」を示します
2
2
 
3
+ #####「再帰を用いない場合」
4
+
3
5
  ```
4
-
5
- **「再帰を用いない場合」**
6
-
7
-
8
6
 
9
7
  tree_node_t*
10
8
 
@@ -68,11 +66,9 @@
68
66
 
69
67
 
70
68
 
69
+ #####「再帰を用いる場合」
70
+
71
71
  ```
72
-
73
- **「再帰を用いる場合」**
74
-
75
-
76
72
 
77
73
  tree_node_t* tree_insert_uniq(tree_node_t *n, int val)
78
74
 

7

書式の改善

2021/11/06 01:42

投稿

Egg-Man
Egg-Man

スコア38

test CHANGED
@@ -1,4 +1,6 @@
1
1
  ### 以下に、「再帰を用いる場合」と「再帰を用いない場合」を示します
2
+
3
+ ```
2
4
 
3
5
  **「再帰を用いない場合」**
4
6
 

6

文法の修正

2021/11/06 01:40

投稿

Egg-Man
Egg-Man

スコア38

test CHANGED
@@ -1,48 +1,6 @@
1
- ```
1
+ ### 以下に、「再帰を用いる場合」と「再帰を用いない場合」を示します
2
2
 
3
- if (n==NULL) {
4
-
5
- n = create_node(val);
6
-
7
- }
8
-
9
- else if (val < n->data) {
10
-
11
- n->left = tree_insert_uniq(n->left, val);
12
-
13
- }
14
-
15
- else {
16
-
17
- n->right = tree_insert_uniq(n->right, val);
18
-
19
- }
20
-
21
- return n;
22
-
23
- }
24
-
25
- ```
26
-
27
-
28
-
29
- ↑この時の処理が
30
-
31
- 「p」ではなく「n」だからなのではないでしょうか?
32
-
33
- `n`は常に木の根(`root`)を表すノードなので、新しいノード(`val`)を追加する場合は、
34
-
35
- `p->left`か`p->right`だと思います
36
-
37
-
38
-
39
-
40
-
41
- 以下に、「再帰を用いる場合」と「再帰を用いない場合」を示します。
42
-
43
- ```
44
-
45
- 「再帰を用いない場合」
3
+ **「再帰を用いない場合」**
46
4
 
47
5
 
48
6
 
@@ -110,7 +68,7 @@
110
68
 
111
69
  ```
112
70
 
113
- 「再帰を用いる場合」
71
+ **「再帰を用いる場合」**
114
72
 
115
73
 
116
74
 

5

書式の改善

2021/11/06 01:37

投稿

Egg-Man
Egg-Man

スコア38

test CHANGED
@@ -33,6 +33,8 @@
33
33
  `n`は常に木の根(`root`)を表すノードなので、新しいノード(`val`)を追加する場合は、
34
34
 
35
35
  `p->left`か`p->right`だと思います
36
+
37
+
36
38
 
37
39
 
38
40
 
@@ -104,4 +106,56 @@
104
106
 
105
107
  ```
106
108
 
109
+
110
+
111
+ ```
112
+
107
113
  「再帰を用いる場合」
114
+
115
+
116
+
117
+ tree_node_t* tree_insert_uniq(tree_node_t *n, int val)
118
+
119
+ {
120
+
121
+
122
+
123
+ if (n==NULL) {
124
+
125
+ n = create_node(val);
126
+
127
+ }
128
+
129
+ else if (val < n->data) {
130
+
131
+ n->left = tree_insert_uniq(n->left, val);
132
+
133
+ }
134
+
135
+ else {
136
+
137
+ n->right = tree_insert_uniq(n->right, val);
138
+
139
+ }
140
+
141
+
142
+
143
+ return n;
144
+
145
+ }
146
+
147
+
148
+
149
+ のように
150
+
151
+ p変数と、
152
+
153
+ while(i<log(count)/log(2)) {
154
+
155
+ の部分が不必要かと思われます。
156
+
157
+ ```
158
+
159
+
160
+
161
+ 昇順に並べるのは、別の関数を容易し、その関数内でヒープソートを行えば実現できると思います。

4

文法の修正

2021/11/06 01:30

投稿

Egg-Man
Egg-Man

スコア38

test CHANGED
@@ -33,3 +33,75 @@
33
33
  `n`は常に木の根(`root`)を表すノードなので、新しいノード(`val`)を追加する場合は、
34
34
 
35
35
  `p->left`か`p->right`だと思います
36
+
37
+
38
+
39
+ 以下に、「再帰を用いる場合」と「再帰を用いない場合」を示します。
40
+
41
+ ```
42
+
43
+ 「再帰を用いない場合」
44
+
45
+
46
+
47
+ tree_node_t*
48
+
49
+ tree_insert_uniq(tree_node_t *n, int val)
50
+
51
+ {
52
+
53
+ tree_node_t *p = n;
54
+
55
+ int i = 0;
56
+
57
+
58
+
59
+ while(1)
60
+
61
+ {
62
+
63
+ if(val < p->data) {
64
+
65
+
66
+
67
+ if(p->left == NULL) {
68
+
69
+ p->left = create_node(val);
70
+
71
+ } else {
72
+
73
+ p = p->left
74
+
75
+ }
76
+
77
+
78
+
79
+ } else if(val >p->data) {
80
+
81
+ if(p->right == NULL) {
82
+
83
+ p->right = create_node(val);
84
+
85
+ } else {
86
+
87
+ p = p->right;
88
+
89
+ }
90
+
91
+
92
+
93
+ } else {
94
+
95
+ printf(“すでに存在しています“);
96
+
97
+ return n;
98
+
99
+ }
100
+
101
+
102
+
103
+ }
104
+
105
+ ```
106
+
107
+ 「再帰を用いる場合」

3

書式の改善

2021/11/06 01:25

投稿

Egg-Man
Egg-Man

スコア38

test CHANGED
@@ -22,6 +22,8 @@
22
22
 
23
23
  }
24
24
 
25
+ ```
26
+
25
27
 
26
28
 
27
29
  ↑この時の処理が

2

文字の修正

2021/11/06 01:21

投稿

Egg-Man
Egg-Man

スコア38

test CHANGED
@@ -22,12 +22,12 @@
22
22
 
23
23
  }
24
24
 
25
- ```
26
-
27
25
 
28
26
 
29
27
  ↑この時の処理が
30
28
 
31
29
  「p」ではなく「n」だからなのではないでしょうか?
32
30
 
33
- nは常に木の根を表すノードなので、新しいノード(val)を追加する場合は、pのleftかrightだと思います
31
+ `n`は常に木の根(`root`)を表すノードなので、新しいノード(`val`)を追加する場合は、
32
+
33
+ `p->left`か`p->right`だと思います

1

文字を加えた

2021/11/05 17:40

投稿

Egg-Man
Egg-Man

スコア38

test CHANGED
@@ -26,6 +26,8 @@
26
26
 
27
27
 
28
28
 
29
- この時の処理が
29
+ この時の処理が
30
30
 
31
31
  「p」ではなく「n」だからなのではないでしょうか?
32
+
33
+ nは常に木の根を表すノードなので、新しいノード(val)を追加する場合は、pのleftかrightだと思います