2015-06-11 3 views
0

Я написал функцию для построения двоичного дерева, и она работает, но я не знаю, как построить дерево в моем интерфейсе. Функция я написал, чтобы найти бинарное дерево выглядит следующим образом:Как построить двоичную структуру дерева с помощью функции в C#

private Node BuildTreeFromPostAndMid(string Post, string Mid) 
{ 
    char genc=Post[Post.Length - 1]; 
    Node gen = new Node(genc); 
    string[] s = Mid.Split(genc); 

    if (s[0] != "") 
    { 
     int l1 = s[0].Length; 
     string newh = ""; 
     for (int i = 0; i < Post.Length - l1 + 1; i++) 
     { 
      if (IsSame(Post.Substring(i, l1), s[0])) 
      { 
       newh = Post.Substring(i, l1); 
      } 
     } 
     gen.lc = BuildTreeFromPostAndMid(newh, s[0]); 
    } 
    else gen.lc = null; 

    if (s[1] != "") 
    { 
     int l2 = s[1].Length; 
     string newh = ""; 
     for (int i = 0; i < Post.Length - l2 + 1; i++) 
     { 
      if (IsSame(Post.Substring(i, l2), s[1])) 
      { 
       newh = Post.Substring(i, l2); 
      } 
     } 
     gen.rc = BuildTreeFromPostAndMid(newh, s[1]); 
    } 
    else gen.rc = null; 

    return gen; 
} 

В пользовательском интерфейсе, пользователь может ввести сообщение заказа и среднего обходом порядка двоичной серии дерева, и я должен построить дерево где-нибудь в моем интерфейсе (У меня недостаточно кредитов для загрузки моей картинки, поэтому я печатаю ее, надеюсь, что вы можете понять, что я говорю)

+1

Это полностью зависит от того, что использует «интерфейс» для фреймворка. WPF, WinForms, GTK, ASP и т. Д. –

+0

Мое имя файла - это WPF, поэтому я думаю, что это WPF. – Rowan

+1

Тогда, может быть, мы не можем помочь. –

ответ

0

Мне пришлось сделать что-то подобное пару лет назад в Silverlight, WPF и WinForms. У вас есть несколько вариантов.

  1. Используйте стандартный элемент управления TreeView, я изначально сделал это в WinForms. Это будет не так хорошо, как другие решения, но это быстро реализовать. Вы можете поработать над ним и настроить его, если потребуется. Это уже сделано, например, go here.

  2. Создайте дерево пользовательского интерфейса через вложенные контейнеры управления. Каждый контейнер на самом деле является узлом, он содержит данные текущего узла и его дочерних элементов (контейнер для каждого ребенка и т. Д.). Это будет рекурсивная структура, вот как я отобразил свое дерево в Silverlight и WPF. Это было просто реализовать, выравнивание производится автоматически, я думаю, что я использовал StackPanel в качестве контейнера и определил пользовательский элемент управления для отображения текущего узла. Но будьте осторожны, это может вызвать проблемы с производительностью в зависимости от глубины вашего дерева (экспоненциальный рост), однако у нас их не было.

  3. Создайте дерево пользовательского интерфейса на холсте, вот как я это сделал в WinForms. Это потребует немного больше работы, так как вам нужно самостоятельно следить за выравниванием. В качестве грубой направляющей ширина вашего холста будет разделена на количество оставшихся листьев, а высота будет разделена на уровни дерева. Вы в основном делаете DFS на дереве и добавляете узлы к вашему холсту, снизу вверх. Как я уже сказал, вам нужно сделать больше работы, чтобы получить правильное выравнивание, но это может стоить того.

  4. Исследования для пользовательских элементов управления, которые соответствуют вашим потребностям, я уверен, что вы найдете их, это редко встречающаяся проблема, которая должна отображать структуру дерева.

Смежные вопросы