Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.39 KB | None | 0 0
  1. """
  2. Nom : Implémentation objet d'un arbre binaire de recherche et d'un noeud
  3. Développeur : Ander Arrosteguy
  4. Date de mise à jour : 23/09/2019
  5. """
  6.  
  7. class BinarySearchTree:
  8.     root = None
  9.     size = 0
  10.     internal_lc = 0
  11.     external_lc = 0
  12.  
  13.     def __init__(self, root = None):
  14.         if self.root != None:
  15.             self.size += 1
  16.         self.root = root
  17.  
  18.     #################################
  19.  
  20.     def setRoot(self, root = None):
  21.         self.root = root
  22.  
  23.     def setSize(self, size):
  24.         self.size = size
  25.  
  26.     def setInternalLc(self, internal_lc):
  27.         self.internal_lc = internal_lc
  28.  
  29.     def setExternalLc(self, external_lc):
  30.         self.external_lc = external_lc
  31.  
  32.     #################################
  33.  
  34.     def getRoot(self):
  35.         return self.root
  36.  
  37.     def getHeight(self):
  38.         return self.getRoot().getHeight()
  39.  
  40.     def getSize(self):
  41.         return self.size
  42.  
  43.     def getInternalLc(self):
  44.         return self.internal_lc
  45.  
  46.     def getExternalLc(self):
  47.         return self.external_lc
  48.  
  49.     #################################
  50.  
  51.     def addNode(self, node, base = None):
  52.         if not self.hasRoot():
  53.             self.setRoot(node)
  54.             return
  55.  
  56.         if base == None:
  57.             base = self.getRoot()
  58.        
  59.         if node.getValue() <= base.getValue():
  60.             if not base.hasLeftChild():
  61.                 base.addLeftChild(node)
  62.                 return
  63.             else:
  64.                 self.addNode(node, base.getLeftChild())
  65.         else:
  66.             if not base.hasRightChild():
  67.                 base.addRightChild(node)
  68.                 return
  69.             else:
  70.                 self.addNode(node, root.getRightChild())
  71.  
  72.         self.setSize(self.getSize() + 1)
  73.  
  74.     # Todo
  75.     def removeNode(self, node):
  76.         self.setSize(self.getSize() - 1)
  77.  
  78.     def hasRoot(self):
  79.         return self.root != None
  80.  
  81.     def getLc(self):
  82.         return self.getExternalLc() + self.internal_lc
  83.  
  84.     def getTreeHeight(self):
  85.         return self.getRoot().getHeight()
  86.  
  87.  
  88. class Node:
  89.     value = 0
  90.     parent = None
  91.     leftChild = None
  92.     rightChild = None
  93.  
  94.     def __init__(self, value, parent = None, leftChild = None, rightChild = None):
  95.         self.value = value
  96.         self.parent = parent
  97.         self.leftChild = leftChild
  98.         self.rightChild = rightChild
  99.  
  100.     #################################
  101.  
  102.     def setValue(self, value):
  103.         self.value = value
  104.  
  105.     def setParent(self, parent = None):
  106.         self.parent = parent
  107.  
  108.     def addLeftChild(self, leftChild):
  109.         self.leftChild = leftChild
  110.  
  111.     def removeLeftChild(self):
  112.         self.leftChild = None
  113.  
  114.     def addRightChild(self, rightChild):
  115.         self.rightChild = rightChild
  116.  
  117.     def removeRightChild(self):
  118.         self.rightChild = None
  119.  
  120.     #################################
  121.  
  122.     def getValue(self):
  123.         return self.value
  124.  
  125.     def getParent(self):
  126.         return self.parent
  127.  
  128.     def getLeftChild(self):
  129.         return self.leftChild
  130.  
  131.     def getRightChild(self):
  132.         return self.rightChild
  133.  
  134.     #################################
  135.  
  136.     def isRoot(self):
  137.         return self.getParent() == None
  138.  
  139.     def isLeaf(self):
  140.         return not self.hasChildren()
  141.  
  142.     def isBranch(self):
  143.         return self.hasChildren()
  144.  
  145.     def hasLeftChild(self):
  146.         return self.getLeftChild() != None
  147.  
  148.     def hasRightChild(self):
  149.         return self.getRightChild() != None
  150.  
  151.     def hasChildren(self):
  152.         return (self.getLeftChild() != None) or (self.getRightChild() != None)
  153.  
  154.     def getHeight(self):
  155.         if not self.hasChildren():
  156.             return 0
  157.  
  158.         heightLeft = 0
  159.         heightRight = 0
  160.  
  161.         if self.hasLeftChild():
  162.             heightLeft = self.getLeftChild().getHeight() + 1
  163.  
  164.         if self.hasRightChild():
  165.             heightRight = self.getRightChild().getHeight() + 1
  166.  
  167.         if heightLeft > heightRight: return heightLeft
  168.         else: return heightRight
  169.  
  170.     def factorBalance(self):
  171.         return self.getRightChild().getHeight() - self.getLeftChild().getHeight()
  172.  
  173.  
  174. if (__name__ == "__main__"):
  175.     tree = BinarySearchTree()
  176.     root = Node(5)
  177.  
  178.     tree.addNode(root)
  179.     tree.addNode(Node(3))
  180.     tree.addNode(Node(4))
  181.     tree.addNode(Node(6))
  182.     tree.addNode(Node(14))
  183.  
  184.     print(tree.getRoot().getRightChild().getRightChild().getValue())
  185.     print(tree.getHeight())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement