Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 10

Поиск слов в бинарном дереве по первым 5 символам

04.03.2021, 13:08. Показов 1884. Ответов 2

Студворк — интернет-сервис помощи студентам
У меня есть класс бинарного дерева с функциями вставки элемента и вывода дерева, теперь мне нужно добавить функцию поиска по первым 5 символам. То есть, я ввожу кол-во символов от 1 до 5, если слово которое начинается с этой комбинации есть в дереве - вывожу слово, если таких слов несколько - вывожу все. Сейчас моя функция поиска (findval) работает только на полное слово.


Python
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
class Node:
 
    def __init__(self, data):
 
        self.left = None
        self.right = None
        self.data = data
 
    def insert(self, data):
 
        if self.data:
            if data < self.data:
                if self.left is None:
                    self.left = Node(data)
                else:
                    self.left.insert(data)
            elif data > self.data:
                if self.right is None:
                    self.right = Node(data)
                else:
                    self.right.insert(data)
        else:
            self.data = data
 
    def findval(self, word):
        if word < self.data:
            if self.left is None:
                return print(str(word) + " Not Found")
            return self.left.findval(word)
        elif word > self.data:
            if self.right is None:
                return print(str(word) + " Not Found")
            return self.right.findval(word)
        else:
            print(str(self.data) + ' is found')
 
    def print_tree(self):
        if self.left:
            self.left.print_tree()
        print(self.data)
        if self.right:
            self.right.print_tree()
 
 
root = Node('Privet')
root.insert('Pooka')
root.insert('Privetikiafsd')
root.insert('asdasdas')
root.findval('Pook')
root.findval('Pooka')
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.03.2021, 13:08
Ответы с готовыми решениями:

Сортировка списка слов по первым символам
Всем привет. Давно читаю форум, очень много полезного здесь нахожу, но появилась задача, которую никак не могу осилить от слова совсем....

Поиск в combobox по первым символам
как в combobox сделать поиск по первым символам?

Поиск слова по первым символам
Господа программисты, есть значит массив слов, каждое слово имеет n знаков и начинается с разной буквы. Вобщем, проще привести пример,...

2
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
04.03.2021, 13:54
Python
1
2
3
4
5
6
7
8
9
    def findval(self, word):
        if self.data.startswith(word):
            print(f"{self.data} is found!")
        elif self.left is not None:
            return self.left.findval(word)
        elif self.right is not None:
            return self.right.findval(word)
        else:
            return print("Not found!")
Добавлено через 16 минут
Maze21127, держи, нашел у себя в хламе:
Python
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
from __future__ import annotations
from typing import Optional, List
 
 
class Node:
 
    def __init__(self, text: str, parent: Optional[Node] = None, *children: Node):
        self.text: str = text
 
        self.parent: Node = parent
 
        self.children: List[Node] = []
        for child in children:
            if not isinstance(child, Node):
                raise TypeError
            child.parent = self
            self.children.append(child)
 
        if isinstance(parent, Node):
            parent.append(self)
 
    def append(self, child: Node):
        self.children.append(child)
 
    def insert(self, index: int, child: Node):
        self.children.insert(index, child)
 
    def remove(self, child: Node):
        self.children.remove(child)
 
    def __str__(self, level: int = 0) -> str:
        text = "-" * level + self.text + "\n"
        for child in self.children:
            text += child.__str__(level + 2)
        return text
 
 
root = Node("Root")
Node("Root->Child_1", root, Node("Root->Child_1->Child_1"))
Node("Root->Child_2", root, Node("Root->Child_1->Child_1"), Node("Root->Child_1->Child_2"))
 
print(root)
 
# Root
# --Root->Child_1
# ----Root->Child_1->Child_1
# --Root->Child_2
# ----Root->Child_1->Child_1
# ----Root->Child_1->Child_2
2
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 10
05.03.2021, 13:02  [ТС]
Функция findval как-то странно работает, раз через раз находит слово, не очень понимаю почему так.
Вот пример

Python
1
2
3
4
5
6
7
root = Node('Privet')
root.insert('Pooka')
root.insert('Privetikiafsd')
root.findval('Priveti')
root.findval('Pook')
root.findval('Poo')
root.findval('Priv')
Priveti не находит, хотя там есть слово, начинающееся на это
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.03.2021, 13:02
Помогаю со студенческими работами здесь

Поиск в файле по первым символам
Есть такой текстовый файл с данными. 019Dima 412Olis 618Simon 414Sipter 311Unimiles 217Gioler 306Ominus 003Filters

Поиск в бинарном дереве
Как можно реализовать поиск элемента в бинарном дереве так, что бы выводило путь до этого элемента? Реализовал поиск этого элемента, но без...

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

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

Поиск в бинарном дереве
Привет всем! Нужно написать код, с которым в бинарном дереве можно найти заданное пользователем значение в вершинах и вывести на экран эту...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru