С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244

Поиск в бинарном дереве

06.02.2017, 18:30. Показов 3850. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не получается организовать поиск в бинарном дереве по значению, а не по ключу.
Использую дерево в качестве примера переводчика, то-есть я ввожу англ. слово - ищет русское слово, помогите исправить метод поиска
Класс бинарного дерева:
Java
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
89
90
91
92
93
94
package lab4;
 
import com.sun.corba.se.impl.oa.poa.ActiveObjectMap.Key;
 
public class BinaryTree {
 
    Node root;
 
    public void addNode(int key, String eng, String rus) {
 
        // Создает новый узел и инициализирует его с помощью конструктора
        Node newNode = new Node(key, eng, rus);
        // Если корня нет то он присваивается
        if (root == null) {
            root = newNode;
        } else {
            // Установить корень как node
            // и следить за текущим нодом
            Node focusNode = root;
            // Родитель для текущего нода
            Node parent;
            while (true) {
                // Корень является главным родителем таким образом мы начинаем обход
                // Тут родителю присваевается текушая нода
                parent = focusNode;
                // Проверка, если новый узел должен идти
                // Левая сторона родительского узла
                if (key < focusNode.key) {
                    //фокус на левый узел
                    focusNode = focusNode.leftChild;
                    // Если у левого узла нету детей
                    if (focusNode == null) {
                        // затем поместите новый узел слева от него
                        parent.leftChild = newNode;
                        return; //Все сделано
                    }
                } else { // В ином случае мы ставим узел на правую сторону
                    focusNode = focusNode.rightChild;
                    // Если у правого узла нету детей
                    if (focusNode == null) {
                        // затем поместите новый узел справа от него
                        parent.rightChild = newNode;
                        return; // Все сделано
                    }
                }
            }
        }
    }
 
    // Поиск узла
    public Node findNode(String eng) {
        // Начать с верхушки дерева
        Node focusNode = root;
        // Пока мы не нашли узел
        // Продолжать поиски
        while (focusNode.eng != eng) {
            int key = 0;
            // Если мы должны искать влево
            if (key < focusNode.key) {
                // Сдвиг фокуса узла к левому ребенку
                focusNode = focusNode.leftChild;
            } else {
                // Сдвиг фокуса узла к правому ребенку
                focusNode = focusNode.rightChild;
            }
            // Узел не найден
            if (focusNode == null)
                return null;
        }
        return focusNode;
    }
}
 
class Node {
    int key;
    String eng;
    String rus;
    Node leftChild;
    Node rightChild;
    
    Node(int key, String eng, String rus) {
        this.key = key;
        this.eng = eng;
        this.rus = rus;
    }
 
    public String toString() {
        return eng + " ----> " + rus;
        /*
         * return name + " has the key " + key + "\nLeft Child: " + leftChild +
         * "\nRight Child: " + rightChild + "\n";
         */
    }
}
Класс Main
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package lab4;
 
public class Main {
 
    public static void main(String[] args){
 
        BinaryTree theTree = new BinaryTree();
        theTree.addNode(1, "Apple", "Яблоко");
        theTree.addNode(2, "Dog", "Собака");
        theTree.addNode(3, "Cat", "Кошка");
        theTree.addNode(4, "Hat", "Шляпа");
        theTree.addNode(5, "Black", "Черный");
        theTree.addNode(6, "Player", "Игрок");
        
        System.out.println(theTree.findNode("Apple"));
    }
}
Заранее спасибо за помощь
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.02.2017, 18:30
Ответы с готовыми решениями:

Поиск точки в бинарном дереве
Как в этот метод добавить условие что если не найдено совпадений то вывести (0,0) private void contains(Node root, Point point) { ...

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

Рекурсия в бинарном дереве поиска
public boolean add(E e) { if(this.root == null) { this.root = new Node(e, null) ; return true; } else { ...

1
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244
06.02.2017, 20:28  [ТС]
Весь проект
lab4.rar
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.02.2017, 20:28
Помогаю со студенческими работами здесь

Дайте источники по реализации remove в бинарном дереве
Через ссылки я всё написал. Задача - написать удаление элемента из дерева, используя реализацию на массивах. А желательно ещё и вставку...

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

Рекурсивный поиск в небинарном дереве
Добрый день! Есть задача реализовать класс, объектом которого является узел дерева (TreeNode). У него может быть множество сыновей...

Поиск в бинарном дереве
Составить рекурсивную функцию для определения первого элемента, у которого совпадают старшая и младшая цифры, в бинарном дереве.

Поиск в Бинарном Дереве!
Задано бинарное дерево. Определить, есть ли в этом дереве хотя бы два одинаковых элемента. Вывести на экран все одинаковые элементы в...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru