Помогите разобрать код бинарного дерева
Нужна помощь з этим кодом. Отдельно модули понятны, но как они работают вместе - та еще путаница.
Помогите написать примеры использования и пояснить, пожалуйста. Весь код:
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