Files
TermNSI/Temp/arbres_binary_tree.py

115 lines
2.8 KiB
Python

__author__ = 'Timothée DECOSTER'
__date_creation__ = 'Nov 15 18:37:07 2020'
__doc__ = """
:mod:`binary_tree` module
:author: {:s}
:creation date: {:s}
>>> t1 = BinaryTree()
>>> t1.is_empty()
True
>>> t2 = BinaryTree(1, t1, t1)
>>> t2.is_empty()
False
>>> t2.get_data()
1
>>> t2.get_left_subtree().is_empty()
True
>>> t2.get_right_subtree().is_empty()
True
>>> t2.is_leaf()
True
>>> print(t2)
(1, (), ())
""".format(__author__, __date_creation__)
class BinaryTreeError(Exception):
def __init__(self, msg):
self.message = msg
class BinaryTree():
def __init__(self, *args):
"""
Binarytree Constructor
:param args: any, BinaryTree , BinaryTree (optional) (Node, Left Child Tree, Right Child Tree )
"""
if len(args) == 0:
self.__content = None
elif len(args) != 3:
raise BinaryTreeError('bad arguments number for binary tree building')
elif not isinstance(args[1], BinaryTree) or not isinstance(args[2], BinaryTree):
raise BinaryTreeError('bad arguments type for binary tree building')
else:
self.__content = (args[0], args[1], args[2])
def is_empty(self):
"""
:return: (bool) True iff this tree is empty
"""
return self.__content is None
def get_data(self):
"""
:return: (any) Value saved in the root node
"""
try:
return self.__content[0]
except TypeError:
raise BinaryTreeError('empty tree has no root')
def get_left_subtree(self):
"""
:return: (BinaryTree) Left Child Subtree
"""
try:
return self.__content[1]
except TypeError:
raise BinaryTreeError('empty tree has no left subtree')
def get_right_subtree(self):
"""
:return: (BinaryTree) Right Child subtree
"""
try:
return self.__content[2]
except TypeError:
raise BinaryTreeError('empty tree has no right subtree')
def __str__(self):
"""
:return: (str) string representation of that tree
"""
if self.is_empty():
return '()'
else:
repr_left = str(self.get_left_subtree())
repr_right = str(self.get_right_subtree())
return '({:s}, {:s}, {:s})'.format(str(self.get_data()), repr_left, repr_right)
def size(self):
"""
:return: (int) numbre of Nodes in Tree
"""
pass
def height(self):
"""
:return: (int) height of that tree
"""
pass
def is_leaf(self):
"""
:return: (bool) True iff tree is a leaf
"""
pass
if __name__ == '__main__':
import doctest
doctest.testmod(optionflags=doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS, verbose=True)