class Node(object):
[docs] """Class node use in the hierarchies.
"""
def __init__(self, value, parent=None, nodes=None):
self.value = value
self.parent = parent
self.nodes = nodes
def is_root(self):
[docs] """Checks if it is a root node or not, based on its parent
:rtype: Boolean indicating if it is a root node or not.
"""
return self.parent is None
def is_leaf(self):
[docs] """Checks if it is a leaf node or not, based on its leaf nodes
:rtype: Boolean indicating if it is a leaf node or not.
"""
return self.nodes is None
def add_node(self, node):
[docs] """Add a new node as a son
:param node: New node to be added into the nodes son list.
"""
if self.nodes is None:
self.nodes = []
self.nodes.append(node)
node.parent = self
def remove_node(self, node):
[docs] """Remove a node from the sons list
:param node: Node to be removed
"""
self.nodes.remove(node)
if len(self.nodes) == 0:
self.nodes = None
def get_leaf_node(self, value):
[docs] """Given a value, look for the node associated with it
among the leaf nodes.
:param value: value of the node being looked for
:rtype: Node with value looked
"""
if self.nodes is not None:
for node in self.nodes:
if node.value == value:
return node
return None
def __repr__(self):
return str(self.value)