def _put(self, key, val, currentNode): if key < currentNode.key : if currentNode.hasLeftChild() : self._put(key, val, currentNode.leftChild) else : currentNode.leftChild = TreeNode(key, val, parent = currentNode) self.updateBalance(currentNode.leftChild) else : if currentNode.hasRightChild() : self._put(key, val, currentNode.rightChild) else : currentNode.rightChild = TreeNode(key, val, parent = currentNode) self.updateBalance(currentNode.rightChild)
def test_node_exists_args(): """Test Create a Tree Node.""" from bst import TreeNode test_node = TreeNode(1, 2, 3) assert test_node
def insert(self, value): # insert new node tmp_node = super()._insert(value) # create new TreeNode with red color new_node = TreeNode(value) #red by default parent = tmp_node.get_parent() # take care of node-parent connection if not parent or value == parent.get_data(): return elif value > parent.get_data(): parent.set_right(new_node) elif value < parent.get_data(): parent.set_left(new_node) # recolor starting from new_node till root self.root = self.__recolor(new_node) # root is black (isn't essential tho!!) self.root.set_color(Color.BLACK)
def tree_node(): from bst import TreeNode return TreeNode()
######################### INSERTION ######################### def insert(self, value): _ = super()._insert(value) self.rebalance() ######################### REMOVAL ######################### def remove(self, del_value): _ = super()._remove(del_value) self.rebalance() if __name__ == "__main__": # to test left rotation avl = AVL(22) avl.root.set_right(TreeNode(43)) avl.root.set_left(TreeNode(18)) avl.root.get_left().set_left(TreeNode(9)) avl.root.get_left().set_right(TreeNode(21)) avl.root.get_left().get_left().set_left(TreeNode(6)) avl.root.get_left().get_left().get_left().set_left(TreeNode(0)) print(avl, '\n') avl.rebalance() print(avl) print('=' * 50) ####################################### # to test left-right rotation avl = AVL(78) avl.root.set_right(TreeNode(88)) avl.root.set_left(TreeNode(50))
def __init__(self, value): if isinstance(value, TreeNode): self.root = value else: self.root = TreeNode(value) self.root.set_color(Color.BLACK)
raise NotImplementedError("You can't check height of Splay Trees!!") def get_depth(self): raise NotImplementedError("You can't check depth of Splay Trees!!") if __name__ == "__main__": # test insert # example from Data Structures and Algorithm in Python (page: 514) stree = SplayTree(8) stree.root.set_left(TreeNode(3)) stree.root.get_left().set_right(TreeNode(4)) stree.root.get_left().get_right().set_right(TreeNode(6)) stree.root.get_left().get_right().get_right().set_left(TreeNode(5)) stree.root.get_left().get_right().get_right().set_right(TreeNode(7)) stree.root.set_right(TreeNode(10)) stree.root.get_right().set_right(TreeNode(11)) stree.root.get_right().get_right().set_right(TreeNode(12)) stree.root.get_right().get_right().get_right().set_right(TreeNode(16)) stree.root.get_right().get_right().get_right().get_right().set_left(TreeNode(13)) stree.root.get_right().get_right().get_right().get_right().set_right(TreeNode(17)) stree.insert(14) stree.find(13) print(stree) stree.find(8) print(stree)