Рубрики
Без рубрики

Понимание прохождения бинарного дерева в питоне

Я решил, что лучший способ понять основные структуры данных и алгоритмы – это написать … Tagged с Python, Codenewbie.

Я решил, что лучший способ понять основные структуры данных и алгоритмы – это написать немного о них во время моего учебного процесса. Это никоим образом не является глубоким описанием того, как работают эти сложные концепции информатики. Я буду объяснять вещи, как будто я разговариваю с 3-летним. Это просто место для меня, чтобы поделиться простыми заметками и попытаться объяснить, что я изучаю. Когда я узнаю больше, я опубликую больше или обновлю свои сообщения. Как дневник Но я буду говорить о коде и технических вещах, а не о своей одержимости Shonen Anime, Ramen и немецкой культурой.

Сегодня я собираюсь объяснить, что я узнал о переселении бинарных деревьев. Пожалуйста, не стесняйтесь добавлять что -нибудь в разделе комментариев ниже. Я всегда открыт для новых идей и перспектив, а также конструктивной критики. Теперь о объяснении.

Насколько я понимаю, существуют два разных типа бинарного обхода дерева, первая глубина (DFT) и ширина первого обезвреживания (BFT).

Во -первых, глубина сначала обход – это способ двигаться вперед через узлы во время посещения каждого из них в определенном порядке, перемещаясь от узела к слева узел. И прямо, пока мы не найдем тупик. Каждый узел посещается, и порядок изменяется на основе типа DFT. Существует 3 типа DFT: заказа, предварительный заказ и обход после заказа. Эти различные типы DFT могут быть реализованы рекурсивно или итеративно. Мы могли бы сделать выбор для реализации рекурсивно, если используем стек.

Inorder ruversal ~ слева, узел, справа. Как следует из названия, это потенциально будет печатать по порядку.

ПРЕДУПРЕЖДЕНИЕ ПРЕДОСТАВЛЕНИЯ ~ Узел, слева, справа.

Пост -задержка ~ слева, справа, узел.

Вот как мог бы выглядеть обход на заказ в Python:

 class TreeNode:
    def _init_(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
def helper(root, res):
    if root is None:
        return 
    helper(root.left,  res)   <----- The left
    res.append(root.val)     <----- The Node!!!
    helper(root.right,  res)  <----- The right
def inorder_traversal(root):
    result = []
    helper(root, result)
    return(result)

Как мы можем ясно видеть из приведенного выше примера, написанного на Python (который я схватил из одного из моих школьных видео для образовательных целей) шаблоны … (например, «слева, справа, узел»), независимо от того, что это за порядок, inorder, Посторонний заказ или предварительный заказ, его можно четко увидеть в коде.

Единственная часть, на которую нам нужно обратить внимание, – это линии со стрелой. Давайте назовем их влево, справа и узел. Единственная часть этого кода, которая должна изменить, – это размещение добавления для нас, чтобы манипулировать этим кодом, чтобы написать все три разных DFT.

Помните влево, узел, правый был порядок для обходов. Поэтому, если мы хотим изменить этот код, чтобы сделать его проходом после заказа, мы просто переместили линию «узел» кода вниз, где «Helper (root.right, res)» и в основном переместите строку «правая» Что касается кода, мы переключаем строку узла с правой линией, чтобы сделать заказ «влево, справа, узел».

Я не хотел разрушать весь код. Я просто хотел затронуть тот факт, что все три DFT могут быть написаны почти одинаково, кроме трех небольших строк кода.

Теперь на BFT’s. В первой обходе в ширину (иногда называемый проходом по порядку stury), это проще. Нам нужно будет посетить все узлы на одном уровне, прежде чем мы перейдем к следующему уровню. Мы не можем сделать это с рекурсивной функцией. Нам нужно использовать очередь для этого. Структура данных для очереди первой в первую очередь. Фактическая концепция немного сложнее, чем эта Но я просто хотел дать общее краткое изложение того, как это работает. Я нашел эту статью о гиках для гиков на очереди Python. —- > https://www.geeksforgeeks.org/queue-in-python/

Оригинал: “https://dev.to/kodebae/understanding-binary-tree-traversal-in-python-2b06”