Binary search trees

CISC220
Fall 2009
James Atlas
Lecture 13: Trees
Skip Lists
Project 1
•
•
•
•
•
AI
Graphics
Networking
Bio-informatics
Natural Language Processing
Objectives for Today
•
•
•
•
Understand Trees/Terminology
Use basic traversals on trees
Understand binary search trees
Construct and use binary search trees
• Reading - K+W Chap 8
Trees
• Nonlinear data structure
Tree Terminology
• root, leaf
• external, internal node
• parent, child, sibling • ancestor, descendant
• subtree
• depth, height
Binary Trees
• Each node has 0, 1, or 2 children
Binary Tree Application:
Huffman Tree
Tree Traversal
• process of visiting each node
• 4 different standard traversals:
–
–
–
–
preorder
inorder
postorder
level-order (also called breadth-first)
• Interactive example:
– http://nova.umuc.edu/~jarc/idsv/lesson1.html
Traversal Exercise
Find the:
• preorder
• inorder
• postorder
• level-order
Exercise Answers
• Preorder traversal sequence:
F, B, A, D, C, E, G, I, H (root, left, right)
• Inorder traversal sequence:
A, B, C, D, E, F, G, H, I (left, root, right)
• Postorder traversal sequence:
A, C, E, D, B, H, I, G, F (left, right, root)
• Level-order traversal sequence:
F, B, G, A, D, I, C, E, H
Binary Trees
• Each node has 0, 1, or 2 children
Binary Search Trees
Binary search trees
– Elements in left subtree < element in subtree root
– Elements in right subtree > element in subtree root
– Both the left and right subtrees are binary search trees
Binary Search Tree (Example)
• Is this a binary search tree?
Binary Search Tree (Example)
Searching a BST
Search algorithm:
1.
2.
3.
4.
if the tree is empty, return NULL
if target equals to root node, return that data
if target < root node, return search(left subtree)
otherwise return search(right subtree)
find(7)
find(12)
find(0)
find(14)
Inserting to a Binary Search Tree
if root is NULL
replace empty tree with new data leaf;
else if item < root->data
return insert(left subtree, item)
else
return insert(right subtree, item)
•
http://www.cs.jhu.edu/~goodrich/dsa/trees/btree.html
Inserting to a Binary Search Tree
Removing from a Binary Search Tree
• Item not present: do nothing
• Item present in leaf: remove leaf (change to null)
• Item in non-leaf with one child:
Replace current node with that child
• Item in non-leaf with two children?
–
–
–
–
Find largest item in the left subtree
Recursively remove it
Use it as the parent of the two subtrees
(Could use smallest item in right subtree)
Removing from a Binary Search Tree
Order of operations?