Преподаватель задал реализовать визуализацию дерева, однако мою визуализацию он таки не принял. Вопрос: Что не так с этим деревом?
using System;
using System.Collections;
using System.Linq;
using System.Text;
namespace tree
{
class Program
{
static void Main(string[] args)
{
char[] arrayS;
int n, m;
Console.WriteLine("Введите строку");
arrayS = Console.ReadLine().ToArray();
arrayS = SortArray(arrayS);
n = getN(arrayS.Length);
m = (int)Math.Pow(2, n - 1) * 2 + 1;
char[,] tree = new char[n, m];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
tree[i, j] = ' ';
}
}
tree[0, m / 2] = arrayS[0];
int position = 1;
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < m; j++)
{
if (tree[i, j] != ' ' && tree[i, j] != '_')
{
if (position < arrayS.Length)
{
tree[i + 1, j - (int)Math.Pow(2, n - 2 - i)] = arrayS[position++];
for (int k = j - (int)Math.Pow(2, n - 2 - i); k < j; k++)
tree[i, k] = '_';
}
if(position
}
private static int getN(int length)
{
if (length == 1) return 1;
else return 1 + getN(length / 2);
}
private static char[] SortArray(char[] arr)
{
char min = arr[0];
for (int i = 0; i < arr.Length; i++)
{
min = arr[i];
for (int j = i; j < arr.Length; j++)
{
if (min > arr[j])
{
min = arr[j];
arr[j] = arr[i];
arr[i] = min;
}
}
}
char[] array = new char[arr.Length];
int position = arr.Length / 2-1;
for (int i = 1; i < arr.Length; i+=2, position--)
{
array[i] = arr[position];
}
position = arr.Length / 2;
for (int i = 0; i < arr.Length; i+=2, position++)
{
array[i] = arr[position];
}
return array;
}
}
}
Ответ
У вас как в левом так и в правом поддереве есть значения, как больше так и меньше N. Дерево предполагает, что с одной стороны на любую глубину все значения меньше чем на вершине, а справа больше.
Комментариев нет:
Отправить комментарий