Post on 16-Dec-2015
Sequence and Associative Containers
• Sequence containers access data by position1. Array (index)2. Vector (index)3. List (iterator)
• Associate containers can access data by value1. Set and Map / Binary search tree
ArraysVectors
Linkedlists Trees
Tree in our life
• Need to turn it upside downP r e side n t - C E O
P r o duc t io nM a n a ge r
Sa le sM a n a ge r
Sh ip p in gSup e r v iso r
P e r so n n e lM a n a ge r
W a r e h o useSup e r v iso r
P ur c h a sin gSup e r v iso r
H IER A R C H IC A L TR EE S TR U C TU R E
Main IndexMain Index ContentsContents66 Main IndexMain Index ContentsContents
Tree Structures
A
JI
HGFE
DCB
(a)
(b )
A G EN ERAL T REE
RootParentChildEdgeLeaf
Interior nodeSubtreeLevel
Depth = max level
Main IndexMain Index ContentsContents88 Main IndexMain Index ContentsContents
Tree Node Level and Path Length
A
HG
FE
DCB
L e ve l: 0
L e ve l: 1
L e ve l: 2
L e ve l: 3
What is the Depth?
Main IndexMain Index ContentsContents9
Binary Tree Definition
A binary tree T is a finite set of nodes with one of the following properties:– (a) T is a tree if the set of nodes is empty.
(An empty tree is a tree, size=0.)
– (b) The set consists of a root, R, and exactly two distinct binary trees, the left subtree TL and
the right subtree TR. The nodes in T consist of node R and all the nodes in TL and TR.
Any node in a binary tree has at most two children
Main IndexMain Index ContentsContents1010 Main IndexMain Index ContentsContents
Selected Samples of Binary Trees
A
E
D
C
B
A
F
H
ED
CB
I
T ree ASiz e 9 D ep t h 3
T ree BSiz e 5 D ep t h 4
G
Does tree B have left subtree TL?
Density of a Binary Tree
• Intuitively, density is a measure of the size of a tree (number of nodes) relative to the depth of the tree.
• Trees with a higher density are important as data structures, because they can “pack” more nodes near the root.
• Access to the nodes is along relatively short paths from the root.
Degenerate tree
• A degenerate (or pathological) tree is where each parent node has only one associated child node. This means that performance-wise, the tree will behave like a linked list data structure.
Evaluating Tree Density
• Complete binary trees are an ideal storage structure, because of their ability to pack a large number of nodes near the root
• Assume we want to store n elements in a complete binary tree. We would like to know the depth d of such a tree.
Depth d --- Size n in complete binary tree
…
…………………
… …
level dhas 2d nodes
-1
20 = 1 nodes
21 = 2 nodes
Geometric series
Main IndexMain Index ContentsContents1717 Main IndexMain Index ContentsContents
Binary Tree Nodes
Abs tract T re e M ode l
A
E F
H
D
CB
G
l e ft A ri gh t
T re e N ode M ode l
l e ft B ri gh t
l e ft E ri gh t
l e ft G ri gh t
l e ft D ri gh t
l e ft C ri gh t
l e ft H ri gh t
l e ft F ri gh t
Node classtemplate <typename T>{public:
T nodeValue;tnode<T> *left, *right;tnode()
{}tnode(const T& item, tnode<T> *lptr=NULL,
tnode<T> *rptr=NULL):nodeValue(item), left(lptr), right(rptr)
{}};
Building a Binary Tree
• A binary tree consists of a collection of dynamically allocated tnode objects whose pointer values specify links to their children.
Recursion• Solution to a problem depends on solutions to smaller
instances of the same problem.
• As a tree is a self-referential (recursively defined) data structure, traversal can naturally be described by recursion.
• Recursive function: a function that calls itself.
21
BINARY TREE SCAN ALGORITHMS
• How to traverse the tree so that each node is visited exactly once?
1. Depth-first• Pre-order• In-order• Post-order
2. Breadth-first (level-order)
Depth-first
• Defined as operations recursively at each node.
• The actions include: visiting the node and performing some task (N), making a recursive descent to the left subtree (L), making a recursive descent to the right subtree (R).
• The different scanning strategies depend on the order in which we perform the tasks.
In-order Scan• The prefix “in” comes from the fact that the visit
occurs between the descents into the two subtrees.
• In this example, we use the order LNR.1. Traverse the left subtree (“go left”).2. Visit the node.3. Traverse the right subtree (“go right”).
L
N
R
Recursively!
Post-order scan
• 1. Traverse the left subtree (“go left”).• 2. Traverse the right subtree (“go right”).• 3. Visit the node.
1.
3.
2.
D, B, E, C, A
Pre-order scan
1. Visit the node.2. Traverse the left subtree (“go left”).3. Traverse the right subtree (“go right”).
2.
1.
3.A, B, D, C, E