Fourteenth Lecture

Download Report

Transcript Fourteenth Lecture

CS 240: Data Structures
Thursday, August 2nd
Trees – Traversals, Representations,
Recursion and Helpers
Submissions

If you need a Project 1 grade, you need to
schedule an appointment with me after
class.
Traversals


Traversals are how we extract data from the tree
– or any data structure.
Queue and Stack look at the data before moving
to the next data.





NLR
-
However, there is no R in this case.
The three major orders:
Preorder:
NLR
Inorder:
LNR
Postorder:
LRN
Tree Traversals







Preorder:
NLR
Inorder:
LNR
Postorder:
LRN
N means Node. More specifically, look at the
node.
L means Left and R means Right.
This is the order we examine data.
You may find it helpful to cross out each thing
you do during a traversal.
___
Tree Traversals
Lets look at some examples.
 This means we have to create some trees.

Representations



Nodes:
Data is allocated on
each insert and
deallocated on each
removal
Traversals are done
using left/right



Arrays/Vectors
Data allocation only
occurs if the insertion
is out of range.
Deallocation only
occurs if sufficient
space can be
recovered.
Traversals are done
using index arithmetic
Representations





Nodes have a left and right pointer.
Vector has to solve for left and right.
Starting at location 0:

Left is location*2 + 1

Right is (location+1)*2
With vectors it is easier to find the parent node,
just reverse the operation.
Drawing time!
Tree ADT

Any node in a Tree is also a Tree.





This is why recursive code works on either of
these.
Tree x;
x.insert(15); //calls insert(15,root);
15
x.insert(30); //calls insert(30,root);


This also applies to list, any node in a list is also a list.
Since root is full, we compare 30 to 15. It is larger, so
insert on the right subtree:
insert(30,root->right);
30
Private vs Public
Many of our methods are public so that the
user can use them.
 There are some methods that we don’t
want to give the user access to.


insert(T value);
vs insert(T value, Node<T> * insertat);

This allows us to create methods for our
own use that the user won’t have access
to.
Tree Terms


So far, we really only talked about “root” which is
equivalent to “first” from our linked lists.
Root also refers to the top-most node in the tree
we are looking at.


A leaf node is a node who has no children.




All nodes are root relative to themselves.
Left = Right = NULL;
If a node is not a leaf node, it is a parent node.
A child is a node with a parent.
Level refers to the depth of the node relative to
the root we are looking at.
Trees and Graphs
Trees are a subset of Graph.
 We can apply searching methods from
Graph to Tree:

Breadth-first search: Provides a level-by-level
output of the Tree
 Depth-first search: If we take the left sub-tree
first: we get preorder or inorder traversal.
 If we take the right sub-tree first: we get
postorder or inorder traversal.

How do we?


Insert: Traverse until you find NULL – going left if we are
small, going right if we are larger. At NULL, create a new
node, return location to caller – who must now point to
the new node.
Remove: Traverse until you find the value you want to
remove.




If it is a leaf node, remove it, parent points to NULL.
If it has 1 child, parent points to the child.
If it has 2 children, find smallest value on right sub-tree. Copy
that value into the current node. Then, remove(current>data,current->right);
Empty: Starting at root, if NULL return. Otherwise,
empty(target->left);, empty(target->right);, delete target;
Problems
First, let us compare a Binary Search Tree
with a Binary Tree – we have only really
talked about Binary Search Trees so far.
 We use Binary Search Trees because of
the improved search performance.
 However, it can degenerate!

Balancing

Therefore, we need to balance our trees.

Search time is slow when the BST is
“skinny”. Therefore, we like our BSTs to be
“beefy”.
Self-Balancing Trees
AVL: A self-balancing tree that uses a
“balance” factor to determine if an
adjustment is needed.
 Each node is created with the balance
factor set to 0.
 Balance is equal to the difference between
the height/depth of a node’s sub-trees.
 Rebalance occurs whenever one of the 4
cases exists.

AVL Cases

Left-Left: Parent = -2, Left Child – 1


Left-Right: Parent = -2, Left Child = +1


Rotate left around child, right around Parent
Right-Right: Parent = +2, Right Child = +1


Rotate Right around Parent
Rotate Left around Parent
Right-Left: Parent = +2, Right Child = -1

Rotate right around child, left around Parent.
AVL
This works out rather well.
 However, almost half of insertions and
removal require rotation.

More trees
Huffman Trees
 This is an algorithm for generating codes
such as morse code.
 For any given set of data and values.
 Pair up the two smallest (replace them
with a tree containing)

Root = sum of the two values
 Left child = one of the data
 Right child = the other

Various Tidbits
Activation Stack
 Recursion and evaluation
 Array vs pointer indexing
 Use of “this”
 Proving algorithms
 Shallow vs Deep copy
