What is the best way to move _add
and _preorder
methods in class Node
to add_node
and preorder
methods in class BinaryTree
such that they have the below class structure:
class Node:
__init__
__repr__
class BinaryTree:
__init__
add_node
preorder
Complete Code::
class Node(object):
def __init__(self, item, left=None, right=None):
self.item = item
self.left = None
self.right = None
def __repr__(self):
return '{}'.format(self.item)
def _add(self, value):
new_node = Node(value)
if not self.item:
self.item = new_node
elif not self.left:
self.left = new_node
elif not self.right:
self.right = new_node
else:
self.left = self.left._add(value)
return self
def _preorder(self):
print(self.item)
if self.left:
self.left._preorder()
if self.right:
self.right._preorder()
class BinaryTree(object):
def __init__(self):
self.root = None
def add_node(self, value):
if not self.root:
self.root = Node(value)
else:
self.root._add(value)
def preorder(self):
if self.root:
return self.root._preorder()
if __name__ == '__main__':
binary_tree = BinaryTree()
print( "Adding nodes 1 to 10 in the tree...")
for i in range(1, 11):
binary_tree.add_node(i)
print()
print( "Printing preorder...")
binary_tree.preorder()