def count(tree): if tree == None: return 0 else: return count(tree.left) + count(tree.right) + 1
Searching
Time: O(log n)
Space: O(1)
def search(tree, value): if tree == None: return False elif value < tree.data: return search(tree.left) elif value > tree.data: return search(tree.right) elif value == tree.data: return True
Insertion
Time: O(log n)
Space: O(1)
def insert(tree, value): node = Node(value)
if tree.root == None: tree.root = node elif value < tree.data: if tree.left is None: tree.left = node else: insert(tree.left, value) elif value >= tree.data: if tree.right is None: tree.right = node else: insert(tree.right, value)
Traversal
Preorder
Visit root node
Traverse left subtree
Traverse right subtree
Time: O(n)
Space: O(1)
def preorder(tree): if tree == None: return print(tree.data) preorder(tree.left) preorder(tree.right)
Inorder
Traverse left subtree
Visit root node
Traverse right subtree
Time: O(n)
Space: O(1)
def inorder(tree): if tree == None: return inorder(tree.left) print(tree.data) inorder(tree.right)
Postorder
Traverse left subtree
Traverse right subtree
Visit root node
Time: O(n)
Space: O(1)
def postorder(tree): if tree == None: return postorder(tree.left) postorder(tree.right) print(tree.data)