Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 75
1

Двоичное дерево поиска

21.02.2014, 15:28. Показов 1726. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.

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

1) Почему второй метод в примере ниже private, ставлю public - не работает.
2) Как правильно вызвать метод InOrderTraversal, что передавать в качестве аргумента, читал про делегаты, но мало что понятно. Может кто то своими словами на данном примере показать.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void InOrderTraversal(Action<T> action)
        {
            InOrderTraversal(action, _head);
        }
 
        private void InOrderTraversal(Action<T> action, BinaryTreeNode<T> node)
        {
            if (node != null)
            {
                InOrderTraversal(action, node.Left);
                action(node.Value);
                InOrderTraversal(action, node.Right);
            }
        }
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2014, 15:28
Ответы с готовыми решениями:

Двоичное дерево поиска - подключаемая логика
На тренинге дали задание реализовать двоичное дерево поиска. Одним из пунктов было: &quot;Enable to...

Для чего может использоваться двоичное дерево поиска?
Всем привет. Разбираюсь, что такое деревья поиска. (Не по чьему-то заданию, а просто самому...

Построить двоичное дерево
1)Построить двоичное дерево и вывести его на экран (вывод на экран идет с корня, ниже наследники)...

Как реализовать двоичное дерево не используя готовых методов
Как реализовать двоичное дерево не используя готовых методов. Если есть готовый код можете...

3
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
21.02.2014, 18:26 2
Makeda, 1)если нет других методов с таким именем, то смена private на public ничего не изменит. Если есть похожий метод с похожей сигнатурой - может не работать.

2) Просто передаете функцию, которая что-то делает, например:
C#
1
2
3
4
static void MyAction<T>(T value)
{
   Console.WriteLine(value);
}
а теперь пишем:
C#
1
mytree.InOrderTraversal(MyAction); //myaction без скобок, передаем ссылку, а не вызываем метод!
Добавлено через 1 минуту
Или что то же самое, но короче:
C#
1
mytree.InOrderTraversal(x=>Console.WriteLine(x));
В идеале, можно передать как MethodGroup (но иногда неработает из-за того, что куча перегрузок), тогда для вывода всех элементов на экран пишем
C#
1
mytree.InOrderTraversal(Console.WriteLine);
0
44 / 44 / 19
Регистрация: 20.01.2014
Сообщений: 87
21.02.2014, 18:27 3
1. Потомучто тип BinaryTreeNode<T> объявлен как internal (посмотрите, легко догодаться если посмотреть на сигнатуру первого метода).

Модификатор метода не должен быть выше чем аргумент метода или возвращаемый тип метода. Т.к в вашем случае например, метод можно увидеть в другой сборке, а тип BinaryTreeNode<T> нельзя, вот и ругается компилятор.

2. Метод InOrderTraversal, принимает два аргумент, первый аргумент типа Action<T>, что скорее всего является делегатом (простой указатель на метод) судя по телу метода, а второй непонятно, может быть чем угодно, Вы строили класс Вам знать.

2.1 Делегат это просто указатель на метод, в вашем случае можно просто передать имя метода, использовать лямбда-выражение или использовать анонимный метод.
0
44 / 44 / 19
Регистрация: 20.01.2014
Сообщений: 87
21.02.2014, 18:35 4
По первому вопросу вот наглядный пример:
Двоичное дерево поиска
0
21.02.2014, 18:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2014, 18:35
Помогаю со студенческими работами здесь

Где можно почитать про создание структур данного типа (двоичное дерево для хранения вещественных чисел)
Ребят подскажите если не трудно где можно почитать про срздание на С# структур данных типа двоичное...

Преобразовать идеальное бинарное дерево в бинарное дерево поиска
Всем привет, я создал идельное бинарное дерево и написал к нему функции. Как мне теперь можно...

Разработать дерево поиска
Разработать проект для обработки дерева поиска, каждый элемент которого содержит целочисленный ключ...

Бинарное дерево поиска
#include &quot;iostream&quot; #include &quot;math.h&quot; #include &quot;windows.h&quot; using namespace std; struct Node {...

Дерево поиска c java на c#
дерево поиска c java на c# сможете? import java.util.NoSuchElementException; public class...

Переделать с java на c# дерево поиска
ОООООчень нужна помощь! Помогите с java переписать на c# этот код. import...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru