Страницы

Поиск по вопросам

вторник, 13 ноября 2018 г.

Визуализация бинарного дерева

Преподаватель задал реализовать визуализацию дерева, однако мою визуализацию он таки не принял. Вопрос: Что не так с этим деревом?
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 } } // 54637 for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { Console.Write(tree[i, j]); } Console.WriteLine(); }
}
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. Дерево предполагает, что с одной стороны на любую глубину все значения меньше чем на вершине, а справа больше.

Комментариев нет:

Отправить комментарий