teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

シフトアップ・ダウンのタイミングで数列を出力してなかった

2020/07/27 13:39

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -21,7 +21,6 @@
21
21
  {
22
22
  var heap = new Heap();
23
23
  heap.AddRange(new[] { 21, 99, 38, 8, 16 });
24
- Console.WriteLine(heap);
25
24
  }
26
25
  }
27
26
 
@@ -32,11 +31,14 @@
32
31
  public void Add(int value)
33
32
  {
34
33
  num = num.Append(value).ToArray();
35
- var i = num.Length - 1;
34
+ var current = num.Length - 1;
35
+ var parent = current / 2;
36
- while (i > 0 && num[i / 2] > num[i])
36
+ while (current > 0 && num[parent] > num[current])
37
37
  {
38
- (num[i / 2], num[i]) = (num[i], num[i / 2]);
38
+ (num[parent], num[current]) = (num[current], num[parent]);
39
+ current = parent;
39
- i /= 2;
40
+ parent /= 2;
41
+ Console.WriteLine(this);
40
42
  }
41
43
  }
42
44
 

2

追記

2020/07/27 13:39

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -4,4 +4,51 @@
4
4
 
5
5
  ### 追記
6
6
 
7
- 定義によっては可能、また他の要素を持たないとは書いていないため、誤った回答として撤回します。
7
+ 定義によっては可能、また他の要素を持たないとは書いていないため、誤った回答として撤回します。
8
+
9
+ ### 追記
10
+
11
+ ```C#
12
+ using System;
13
+ using System.Collections.Generic;
14
+ using System.Linq;
15
+
16
+ namespace ConsoleApp1
17
+ {
18
+ class Program
19
+ {
20
+ static void Main()
21
+ {
22
+ var heap = new Heap();
23
+ heap.AddRange(new[] { 21, 99, 38, 8, 16 });
24
+ Console.WriteLine(heap);
25
+ }
26
+ }
27
+
28
+ class Heap
29
+ {
30
+ private int[] num = new int[0];
31
+
32
+ public void Add(int value)
33
+ {
34
+ num = num.Append(value).ToArray();
35
+ var i = num.Length - 1;
36
+ while (i > 0 && num[i / 2] > num[i])
37
+ {
38
+ (num[i / 2], num[i]) = (num[i], num[i / 2]);
39
+ i /= 2;
40
+ }
41
+ }
42
+
43
+ public void AddRange(IEnumerable<int> values)
44
+ {
45
+ foreach (var i in values) Add(i);
46
+ }
47
+
48
+ public override string ToString()
49
+ {
50
+ return string.Join(",", num);
51
+ }
52
+ }
53
+ }
54
+ ```

1

追記

2020/07/27 12:51

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -1,3 +1,7 @@
1
1
  > 数列(21、99,38,8,16)を要素に持つ完全二分木を制作し
2
2
 
3
- 不可能です。
3
+ 不可能です。
4
+
5
+ ### 追記
6
+
7
+ 定義によっては可能、また他の要素を持たないとは書いていないため、誤った回答として撤回します。