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