Binary Search Trees, Applications

advertisement
Binary Search Trees
BST Properties
• Have all properties of binary tree
• Items in left subtree are smaller than items
in any node
• Items in right subtree are larger than items
in any node
Items
• Items must be comparable
• All items have a unique value
• Given two distinct items x and y either
– value(x) < value(y)
– value(x) > value(y)
• If value(x) = value(y) then x = y
• It will simplify programming to assume
there are no duplicates in our set of items.
Items
• Need to map Items to a numerical value
• Integers
– Value(x) = x
• People
– Value(x) = ssn
– Value(x) = student id
Comparable Interface
• Want general tree code
• Requirement of item is that it supports
–<
–>
–=
• Java uses Interfaces for implementation
• Similar to abstract method
• Specify a method that using class is
responsible for
BST Operations
• Constructor
• Insert
• Find
– Findmin
– Findmax
• Remove
BST Operations
• Generally Recursive
BinaryNode operation( Comparable x, BinaryNode t ) {
// End of path
if( t == null )
return null;
if( x.compareTo( t.element ) < 0 )
return operation( x, t.left );
else if( x.compareTo( t.element ) > 0 )
return operation( x, t.right );
else
return t; // Match
}
BST Find Method
private BinaryNode find( Comparable x, BinaryNode t )
{
if( t == null )
return null;
if( x.compareTo( t.element ) < 0 )
return find( x, t.left );
else if( x.compareTo( t.element ) > 0 )
return find( x, t.right );
else
return t; // Match
}
BST Remove Operations
• Remove
– Node is leaf
• Remove node
– Node has one child
• Replace node with child
– Node has two children
• Replace node with smallest child of right subtree.
Removing with value 2
6
6
2
1
8
3
1
5
3
6
8
1
5
3
4
3
8
5
3
4
4
Remove method
private BinaryNode remove( Comparable x, BinaryNode t )
{
if( t == null )
return t; // Item not found; do nothing
if( x.compareTo( t.element ) < 0 )
t.left = remove( x, t.left );
else if( x.compareTo( t.element ) > 0 )
t.right = remove( x, t.right );
else if( t.left != null && t.right != null ) // Two children
{
t.element = findMin( t.right ).element;
t.right = remove( t.element, t.right );
}
else
t = ( t.left != null ) ? t.left : t.right;
return t;
}
Internal Path Length
• Review depth/height
• Depth
– Depth is number of path segments from root
to node
– Depth of node is distance from root to that
node.
– Depth is unique
– Depth of root is 0
Internal Path Length
• Height
– Height is maximum distance from node to a
leaf.
– There can be many paths from a node to a
leaf.
– The height of the tree is another way of
saying height of the root.
Internal Path Length
• IPL is the sum of the depths of all the
nodes in a tree
• It gives a measure of how well balanced
the tree is.
Internal Path Length
N=4
IPL = 1 + 1 + 2 = 4
1
1
2
Internal Path Length
N=4
IPL = 1 + 2 + 3 = 6
1
2
3
Average IPL for N nodes
N=4
• Calculate IPL of all possible trees
1
1
1
1
2
2
3
2
2
BST Efficiency
• If tree is balanced O(log(n))
• No guarantee that tree will be balanced
• Analysis in book suggests on IPL =
O(nlog(n))
• This analysis is based on the assumption
that all trees are equally likely
• Could always get the worst case (a
degenerate tree).
Where do BST fit in
•
•
•
•
Simple to understand
Works for small datasets
Basis for more complicated trees
Using inheritance can implement
– AVL trees
– Splay trees
– Red Black trees
Do your Lex
Download