Помогите разобрать код бинарного дерева

Нужна помощь з этим кодом. Отдельно модули понятны, но как они работают вместе - та еще путаница.

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

class Node:
    root_count = 0

    def __init__(self, data = None, left = None, right = None):
        self.data = data
        self.left = left
        self.right = right
        self.root_count += 1

    def __str__(self):
        return 'Node ['+str(self.data)+']'


class Tree:
    def __init__(self):
        self.root = None

    # функция для добавления узла в дерево
    def newNode(self, data):
        return Node(data, None, None)

    # функция для вычисления высоты дерева
    def height(self, Node):
        if Node == None:
            return 0
        else:
            lheight = self.height(Node.left)
            rheight = self.height(Node.right)

        if lheight > rheight:
            return(lheight+1)
        else:
            return(rheight+1)

    # функция для зеркального отражения дерева
    def mirrorTree(self, Node):
        if Node.left and Node.right:
            Node.left, Node.right = Node.right, Node.left
            self.mirrorTree(Node.right)
            self.mirrorTree(Node.right)
        else:
            if Node.left == None and Node.right:
                return self.mirrorTree(Node.right)
            if Node.right == None and Node.left:
                return self.mirrorTree(Node.left)

    # функция для проверки наличия узла
    def lookUp(self, Node, target):
        if Node == None: return 0
        else:
            if target == Node.data: return 1
            else:
                if target > Node.data: return self.lookUp(Node.left, target)
                else: return self.lookUp(Node.right, target)

    # функции для вычисления ширины дерева
    def getWidth(self, Node, level):
        if Node == None: return 0
        if level == 1: return 1
        elif level > 1:
            return self.getWidth(Node.left, level - 1) + self.getWidth(Node.right, level - 1)

    def getMaxWidth(self, Node):
        max_width = 0
        i = 0
        width = 0
        h = self.height(Node)
        while i < h:
            width = self.getWidth(Node, i)
            if width > max_width:
                max_width = width
            i += 1

        return max_width

    # функция для распечатки элементов на определенном уровне дерева
    def printTreeLevel(self, Node, level):
        if Node == None: return 0
        if level == 1: print('%d' % Node.data)
        elif level > 1:
            self.printTreeLevel(Node.left, level - 1)
            self.printTreeLevel(Node.right, level - 1)

    # функция для распечатки дерева
    def printTree(self, root):
        h = self.height(self.root)
        i = 1
        while i <= h:
            self.printTreeLevel(self.root, i)
            i += 1

    # количество узлов
    def howMuchRoot(self, Node):
        return Node.root_count

Ответы (0 шт):