Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 23, 2017 17:15:46

Hannibal
Зарегистрирован: 2017-02-23
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск узла бинарного дерева

Всем привет, нужна помощь. Дана простая реализация бинарного дерева в виде класса Tree. В классе реализован метод добавления элементов к дереву. Задача – реализовать еще два метода: 
метод find(value). В качестве аргумента метод принимает значение (число). Метод должен возвращать True, если элемент найден в дереве или False, если такой элемент отсутствует. 
метод print(). Этот метод не принимает никаких аргументов. Результат работы метода – вывод структуры дерева (значений его элементов и иерархии) на экран (вывод может иметь любой осмысленный вид, но запрещается выводить все элементы в одну строку).
Плюсом будет имплементация специального метода для возможности использовать с инстансом класса Tree конструкцию вида:
root = Tree(10)
if 10 in root:


 class Tree: 
 
    def __init__(self, value, root=None):
        # left and right child nodes
        self.lchild = None
        self.rchild = None 
        # node value
        self.value = value
        # parent element for current node
        self.root = root 
 
    def add(self, value):
        # track current node (level)
        current_node = self 
        # track parent node
        last_node = None
        # search the place to insert new node
        while current_node:
            last_node = current_node 
 
            if value > current_node.value: 
               current_node = current_node.rchild
            elif value < current_node.value:
                 current_node = current_node.lchild
            else: # element already presented in tree
                return False 
 # create new node and link it with parent
        new_node = Tree(value, last_node)
        if value > last_node.value:
           last_node.rchild = new_node
        else:
            last_node.lchild = new_node
            return True
Пример работы класса: 
>> root = Tree(10) 
>> root.add(9) 
>> root.add(8) 
>> root.add(11) 
>> root.add(15) 
>> root.add(16) 
>> root.add(12) 
>> root.add(2) 
‘‘‘ Поиск элемента ‘‘‘ 
>> root.find(11) 
True 
>> root.find(5) 
False 
‘‘‘ Вывод элементов дерева ‘‘‘
>> root.print() 10
               9 11 
             8    15 
           2     12 16

Отредактировано Hannibal (Фев. 23, 2017 18:03:25)

Офлайн

#2 Фев. 23, 2017 17:19:16

Hannibal
Зарегистрирован: 2017-02-23
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск узла бинарного дерева

Hannibal
‘‘‘ Вывод элементов дерева ‘‘‘
>> root.print() 10
9 11
8 15
2 12 16
Здесь вывод в неправильном (пропали пробелы) (на самом деле имеет вид треугольника)

Офлайн

#3 Фев. 23, 2017 17:42:55

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Поиск узла бинарного дерева

Hannibal
Здесь вывод в неправильном
 [code python][/code]



Офлайн

#4 Фев. 23, 2017 18:04:08

Hannibal
Зарегистрирован: 2017-02-23
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск узла бинарного дерева

FishHook
Поправил

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version