Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 28.02.2015
Сообщений: 8
1

Бинарное дерево и поиск элементов в нем

01.11.2015, 19:46. Показов 828. Ответов 2
Метки нет (Все метки)

Пытаюсь написать класс для поиска элементов в бинарном дереве. Написал, но у меня не работает нижняя часть кода. Помогите решить это или подскажите плиз
вот исходник
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
namespace BinaryTree
{
    public class BinaryTree<TNode> where TNode : IComparable<TNode>
    {
        
 
        public TNode Value { get; set; }
        public BinaryTree<TNode> LeftSubtree { get; set; }
        public BinaryTree<TNode> RightSubtree { get; set; }
 
        private readonly Comparison<TNode> CompareFunction;
        private BinaryTree<TNode> root { get; set; }
 
 
 
        
 
 
 
        public BinaryTree(TNode nodeValue) {
            Value = nodeValue;
            LeftSubtree = null;
            RightSubtree = null;
        }
 
        public void Add(TNode newValue)
        {
            if (Value.CompareTo(newValue) > 0)
            {
                // left
                if (LeftSubtree == null)
                    LeftSubtree = new BinaryTree<TNode>(newValue);
                else
                    LeftSubtree.Add(newValue);
            }
            else
            {
                // right
                if (RightSubtree == null)
                    RightSubtree = new BinaryTree<TNode>(newValue);
                else
                    RightSubtree.Add(newValue);
            }
        }
 
        public void Browse()
        {
            if (LeftSubtree != null) LeftSubtree.Browse();
            // LeftSubtree?.Browse();
 
            Console.WriteLine(Value);
 
            RightSubtree?.Browse();
 
        }
        public bool IsEmpty()
        {
            if (this.Value != null)
                return true;
            
            else
                return false;
            
        }
     
        public bool Contains(TNode Value)
        {
            // search the tree for a node that contains data
            BinaryTree<TNode> current = root;
            int result;
            while (current != null)
            {
                result = CompareFunction(current.Value, Value);
                if (result == 0)
                    // we found data
                    return true;
                else if (result > 0)
                    // current.Value > data, search current's left subtree
                    current = current.LeftSubtree;
                else if (result < 0)
                    // current.Value < data, search current's right subtree
                    current = current.RightSubtree;
            }
 
            return false;       // didn't find data
        }
    }
}
данные дерева
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
35
36
37
38
namespace BinaryTree
{
 
    class Program
    {
        static void Main(string[] args)
        {
            BinaryTree<int> tree = new BinaryTree<int>(1);
 
            tree.Add(5);
            tree.Add(-1);
            tree.Add(7);
            tree.Add(-5);
            tree.Add(1);
 
            tree.Browse();
 
            BinaryTree<string> treeString = new BinaryTree<string>("ahoy");
 
            treeString.Add("car");
            treeString.Add("plane");
            treeString.Add("dog");
            treeString.Add("pidgeon");
            treeString.Add("pig");
            treeString.Add("monkey");
 
            treeString.Browse();
            // Test if we can find values in the tree
            for (int Lp = 1; Lp <= 10; Lp++)
                Console.WriteLine("Find ({0}) = {1}", Lp, tree.Contains(Lp));
 
            // Test if we can find a non-existing value
            Console.WriteLine("Find (999) = {0}", tree.Contains(999));
            Console.WriteLine("Value is contained inside the tree is " + tree.IsEmpty());
            Console.ReadKey();
        }
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2015, 19:46
Ответы с готовыми решениями:

Бинарное дерево: поиск суммы всех элементов
Возникла проблема в коде ,не могу разобраться #include &quot;stdafx.h&quot; #include&lt;iostream&gt;...

Бинарное дерево. Поиск, вывод и удаление элементов из дерева
Задача следующая: Разработать программу, которая содержит информацию о реестре жилых помещений...

Бинарное дерево: формирование, отображение, обход, поиск и удаление элементов
Написать программу, демонстрирующую работу с динамическими структурами данных и динамической...

Сформировать идеально сбалансированное бинарное дерево и найти в нем максимальный элемент
Далее преобразовать его в дерево поиска и тоже найти максимальный элемент.

2
Эксперт .NETАвтор FAQ
10297 / 5032 / 1820
Регистрация: 11.01.2015
Сообщений: 6,221
Записей в блоге: 34
02.11.2015, 00:05 2
space_goose,
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
    public class BinaryTree<TNode> where TNode : IComparable<TNode>
    {
        public TNode Value { get; set; }
        public BinaryTree<TNode> LeftSubtree { get; set; }
        public BinaryTree<TNode> RightSubtree { get; set; }
 
        public BinaryTree(TNode nodeValue)
        {
            Value = nodeValue;
            LeftSubtree = null;
            RightSubtree = null;
        }
 
        public void Add(TNode newValue)
        {
            var comp = Value.CompareTo(newValue);
            if (comp > 0)
            {
                // left
                if (LeftSubtree == null)
                    LeftSubtree = new BinaryTree<TNode>(newValue);
                else
                    LeftSubtree.Add(newValue);
            }
            if (comp < 0)
            {
                // right
                if (RightSubtree == null)
                    RightSubtree = new BinaryTree<TNode>(newValue);
                else
                    RightSubtree.Add(newValue);
            }
        }
 
        public void Browse()
        {
            if (LeftSubtree != null) LeftSubtree.Browse();
            if (RightSubtree != null) RightSubtree.Browse();
            Console.WriteLine(Value);
        }
 
        public bool Contains(TNode Value)
        {
            // search the tree for a node that contains data
            BinaryTree<TNode> current = this;
 
            while (current != null)
            {
                int result = current.Value.CompareTo(Value);
                if (result == 0)
                    // we found data
                    return true;
                else if (result > 0)
                    // current.Value > data, search current's left subtree
                    current = current.LeftSubtree;
                else if (result < 0)
                    // current.Value < data, search current's right subtree
                    current = current.RightSubtree;
            }
 
            return false;       // didn't find data
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            BinaryTree<int> tree = new BinaryTree<int>(1);
 
            tree.Add(5);
            tree.Add(-1);
            tree.Add(7);
            tree.Add(-5);
            tree.Add(1);
 
            tree.Browse();
 
            // Test if we can find values in the tree
            for (int Lp = -5; Lp <= 10; Lp++)
                Console.WriteLine("Find ({0}) = {1}", Lp, tree.Contains(Lp));
 
            Console.ReadKey();
1
0 / 0 / 1
Регистрация: 28.02.2015
Сообщений: 8
02.11.2015, 18:03  [ТС] 3
Storm23,
благодарю(кнопку уже нажал). Понял в чем ошибка была. Не подскажешь, будет ли этот же самый метод работать для строк?
C#
1
2
3
4
5
6
7
8
9
10
BinaryTree<string> treeString = new BinaryTree<string>("ahoy");
 
            treeString.Add("car");
            treeString.Add("plane");
            treeString.Add("dog");
            treeString.Add("pidgeon");
            treeString.Add("pig");
            treeString.Add("monkey");
 
            treeString.Browse();
Добавлено через 3 часа 10 минут
Storm23, все уже сам разобрался! все получилось как хотел сделать. Спасибо за помощь
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2015, 18:03

Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру
Помогите, не могу понять!( Нужно исходное бинарное дерево превратить в бинарное дерево поиска, при...

Бинарное дерево. Поиск.
Здравствуйте. Дано задание, создать бинарное дерево с возможностью добавления, удаления элементов и...

Бинарное дерево, поиск пирамиды
Помогите написать программу: Дано бинарное дерево. Определить какие поддеревья являются...

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru