Страницы

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

воскресенье, 22 декабря 2019 г.

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

#c_sharp #бинарное_дерево


Преподаватель задал реализовать визуализацию дерева, однако мою визуализацию он таки
не принял. Вопрос: Что не так с этим деревом?

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 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;
    }


}

}

    


Ответы

Ответ 1



У вас как в левом так и в правом поддереве есть значения, как больше так и меньше N. Дерево предполагает, что с одной стороны на любую глубину все значения меньше чем на вершине, а справа больше.

Ответ 2



public static int Print(Node node, int x, int y) { Console.SetCursorPosition(x, y); Console.Write(node.Value); var loc = y; if (node.Right != null) { Console.SetCursorPosition(x + 2, y); Console.Write("--"); y = Print(node.Right, x + 4, y); } if (node.Left != null) { while (loc <= y) { Console.SetCursorPosition(x, loc + 1); Console.Write(" |"); loc++; } y = Print(node.Left, x, y + 2); } return y; }

1 комментарий:

  1. Визуализация бинарного дерева на сайтах:
    http://btv.melezinek.cz/binary-search-tree.html
    https://soft.softodrom.ru/ap/Trees-Portable-p19987

    ОтветитьУдалить