Module pywander.algorithm.tree.binary_search_tree

Classes

class BinarySearchTree (name, parent=None)

binary search tree

Expand source code
class BinarySearchTree(Tree):
    """
    binary search tree
    """

    def __str__(self):
        if self.parent is None:
            return '<BinarySearchTree: {0}>'.format(self.name)
        else:
            return '<BinarySearchTreeNode: {0}>'.format(self.name)

    def __repr__(self):
        if self.parent is None:
            return '<BinarySearchTree: {0}>'.format(self.name)
        else:
            return '<BinarySearchTreeNode: {0}>'.format(self.name)

    @property
    def left(self):
        if len(self.children) == 0:
            self.children = [None, None]
        elif len(self.children) == 1:
            self.children.append(None)

        return self.children[0]

    @left.setter
    def left(self, node):
        self.children[0] = node

    @property
    def right(self):
        if len(self.children) == 0:
            self.children = [None, None]
        elif len(self.children) == 1:
            self.children.append(None)

        return self.children[1]

    @right.setter
    def right(self, node):
        self.children[-1] = node

    def insert(self, name):
        if hash(name) < hash(self.name):
            if self.left is None:
                self.left = BinarySearchTree(name, parent=self)
            else:
                self.left.insert(name)
        elif hash(name) > hash(self.name):
            if self.right is None:
                self.right = BinarySearchTree(name, parent=self)
            else:
                self.right.insert(name)
        else:
            self.name = name

    def find(self, name):
        if hash(name) < hash(self.name):
            if self.left is None:
                return False
            else:
                return self.left.find(name)
        elif hash(name) > hash(self.name):
            if self.right is None:
                return False
            else:
                return self.right.find(name)
        else:
            return self

Ancestors

Instance variables

prop left
Expand source code
@property
def left(self):
    if len(self.children) == 0:
        self.children = [None, None]
    elif len(self.children) == 1:
        self.children.append(None)

    return self.children[0]
prop right
Expand source code
@property
def right(self):
    if len(self.children) == 0:
        self.children = [None, None]
    elif len(self.children) == 1:
        self.children.append(None)

    return self.children[1]

Methods

def find(self, name)
def insert(self, name)

Inherited members