Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 27.10.2018
Сообщений: 30

Бинарное дерево с итератором, обходящим узлы дерева в "глубину" в обратном направлении

29.10.2022, 20:33. Показов 1427. Ответов 5

Студворк — интернет-сервис помощи студентам
Написать класс реализующий структуру данных "бинарное дерево".
Реализовать в классе итератор, обходящий узлы дерева в "глубину" в обратном направлении.

Пробовал сам, но с c# у меня проблемы. На си могу написать, а на c# не хватает знаний, но очень нужно.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.10.2022, 20:33
Ответы с готовыми решениями:

Сформировать бинарное дерево поиска и определить максимальную глубину дерева
Добрый день всем. По задаче необходимо сформировать бинарное дерево поиска и определить максимальную глубину дерева. Перед завершением...

Бинарное дерево. Стековый обход дерева в обратном порядке
В общем. Задание такое: Построить бинарное дерево целочисленного типа. Выполнить обход дерева рекурсивным и нерекурсивным (стековым)...

Бинарное дерево: удалить узлы, которые имеют одного правого потомка
Дано дерево. Удалить узлы, которые имеют одного правого потомка. Составить из этих узлов упорядоченный массив.

5
0 / 0 / 0
Регистрация: 27.10.2018
Сообщений: 30
30.10.2022, 14:41  [ТС]
У меня есть код для бинарного дерева:

C#
1
2
3
4
5
6
public class TreeNode
{
        public int Value;
        public TreeNode Left; 
        public TreeNode Right;
}
Нужно теперь, используя класс итератор, обойти бинарное дерево обратным обходом в глубин
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
30.10.2022, 14:49
Цитата Сообщение от akro123 Посмотреть сообщение
обойти бинарное дерево обратным обходом в глубин
Напишите обычный обход в глубину, а потом поменяйте местами Left и Right.
0
0 / 0 / 0
Регистрация: 27.10.2018
Сообщений: 30
30.10.2022, 15:25  [ТС]
Вот написал, но как через итератор это сделать...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Tree
{
    public class TreeNode
    {
        public int Value;
        public TreeNode Left; 
        public TreeNode Right;
    }
    
    
    public void Add(ref TreeNode node, int value)
    {
        node.Value = value;
    }
        
    public void CRL(TreeNode node, ref string s)
    {
        if (node != null)
        {
            CRL(node.Left, ref s);
            CRL(node.Right, ref s); 
            s += node.Value.ToString() + " "; 
        }
    }
}
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
30.10.2022, 22:40
akro123, выбросьте эту рекурсию и реализуйте через цикл - будет достаточно изменить тип возвращаемого значения на IEnumerable<string> и возвращать элементы через yield return.
С рекурсией тоже можно так делать, но это будет жутко неэффективно.
0
Заблокирован
01.11.2022, 04:45
Лучший ответ Сообщение было отмечено akro123 как решение

Решение

возможно так должно выглядеть:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//Program.cs
using System;
 
namespace Дерево
{
    class Program
    {
        static void Main(string[] args)
        {
            int n;
            Console.Write("Количество элементов: ");
            int.TryParse(Console.ReadLine(), out n);
            Console.WriteLine();
            Random rdm = new Random();
            BinTree Tree = new BinTree();
            for (int i = 0; i < n; i++)
            {
                int x = rdm.Next(-50, 51);
                Tree.Insert(x);
                Console.Write(x + " ");
            }
            Console.WriteLine("\n\nДерево:");
            Tree.Show();
            //
            Console.WriteLine("\nИтератор:");
            //Сам факт возможности использовать foreach 
            //говорит о наличии итератора
            foreach (BinTree t in Tree)
                Console.Write(t.GetVal() + " ");
            Console.WriteLine();
            Console.ReadKey(true);
        }
    }
}
Миниатюры
Бинарное дерево с итератором, обходящим узлы дерева в "глубину" в обратном направлении  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.11.2022, 04:45
Помогаю со студенческими работами здесь

Создать бинарное дерево. Найти среднее арифметическое дерева, добавить его как элемент дерева
Создать бинарное дерево. Найти среднее арифметическое дерева, добавить ср ареф как элемент дерева

Бинарное дерево поиска (определить максимальную глубину)
Всем привет! Делаю лабу, написал основу, но не могу понять, как сделать последний пункт задания, нужно определить максимальную глубину...

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

Дерево: Как правильно удалить все узлы дерева?
Как правильно удалить все узлы дерева?

Создать и напечатать бинарное дерево целых чисел. Удалить узлы, содержащие четные числа
Помогите пожалуйста с этой задачкой. Не шарю я деревья.


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru