Метод поиска в двоичном дереве поиска - PullRequest
3 голосов
/ 10 июля 2020

Изучая двоичные деревья поиска, пытаясь реализовать это сам, мне удалось заставить методы обхода работать правильно, теперь мне интересно, почему этот метод поиска не работает должным образом, не могли бы вы помочь определить ошибку в методе поиска, который я могу Кажется, я не заметил, где я мог ошибиться

Могу ли я также получить помощь с методом удаления Я не вижу, где может быть ошибка, и, что еще хуже, Я не получаю сообщение об ошибке, чтобы указать мне на направление или и вывод

ОБЕИ МЕТОДЫ Я НЕ ПОЛУЧАЮ ВЫВОД

КОД НИЖЕ

 def search(self, val):
    return self.__search(self.root, val) is not None


def __search(self, p, val):

    if p is None:
        return None

    if val < p.info:
        return self.__search(p.lchild, val)

    elif val > p.info:
        return self.__search(p.rchild, val)

    else:
     return p




tree = BinaryTree()
tree.insertion(59)


def delete(self, val):
    self.root = self.__delete(self.root, val)


def __delete(self, p, val):

    if p is None:
        print(f"{val} Was not found")


    elif val < p.info:
        p.lchild = self.__delete(p.lchild, val)

    elif val > p.info:
        p.rchild = self.__delete(p.rchild, val)

    
    else:

        if p.lchild is not None and p.rchild is not None:

            s = p.rchild
            while s.lchild is not None:
                s = s.lchild

            p.info = s.info
            p.rchild = self.__delete(p.rchild, s.info)


        else:

            if p.lchild is not None:
                ch = p.lchild

            else:
                ch = p.rchild

            p = ch
       
        return p


tree = BinaryTree()
tree.insertion(59)
tree.insertion(45)
tree.insertion(72)
tree.insertion(75)
tree.insertion(69)
tree.insertion(50)
tree.delete(69)
tree.level_order()
...