D.S BATRA
Tree
Nodes
Each node can have 0 or more children
A node can have at most one parent
Binary tree
Tree
Binary Tree
Trees
Terminology
Root no parent
Leaf no child
Interior non-leaf
Height distance from root to leaf
Root node
Interior nodes
Leaf nodes
Height
Key property
Value at node
Example
X>Y
X<Z
Examples
5
10
5
10
45
30
45
30
2
25
45
10
25
30
25
Binary
search trees
Not a binary
search tree
// Found it
// In left subtree
// In right subtree
Find ( root, 2 )
root
10
5
2
10 > 2, left
30
25
5 > 2, left
45
2 = 2, found
5 > 2, left
45
30
10
25
2 = 2, found
Find (root, 25 )
10
5
25
25 = 25, found
30
10
25
Degenerate
binary tree
Balanced
binary tree
Complete
binary tree
Degenerate
Degenerate
binary tree
Balanced
Height = O( log(n) )
for n nodes
Useful for searches
Balanced
binary tree
Time of search
O( log(n) ) time
Degenerate tree
O( n ) time
Like searching linked list / unsorted array
Insertion
Deletion
Algorithm
1.
2.
3.
4.
Observations
Example Insertion
Insert ( 20 )
10
5
30
25
20
45
Insert 20 on left
Algorithm
1.
2.
3.
Observation
Delete ( 25 )
10
5
25
10
5
25 = 25, delete
30
45
Delete ( 10 )
10
5
5
30
25
5
45
Replacing 10
with largest
value in left
subtree
5
30
25
2
45
Replacing 5
with largest
value in left
subtree
30
25
45
Deleting leaf
Delete ( 10 )
10
5
25
30
25
5
45
Replacing 10
with smallest
value in right
subtree
25
30
25
5
45
Deleting leaf
30
45
Resulting tree
2/3 trees
B-trees
Parse trees
XML
Parse Trees
%
*
/
C 5
*
2
D 5
Tree Traversal
+
A
%
*
/
C 5
*
2
void Node::inOrder () {
if (left != NULL) {
cout << (; left->inOrder(); cout << );
}
cout << data << endl;
if (right != NULL) right->inOrder()
}
Output: A C / 5 * 2 + D * 5 % 4
To disambiguate: print brackets
D 5
%
*
*
2
C 5
Output: + - A * / C 5 2 % * D 5 4
void Node::postOrder () {
if (left != NULL) left->preOrder ();
if (right != NULL) right->preOrder ();
cout << data << endl;
}
Output: A C 5 / 2 *
-D5*4%+
D 5
XML
Data Representation
E.g.
<dependency>
<object>sample1.o</object>
<depends>sample1.cpp</depends>
<depends>sample1.h</depends>
<rule>g++ -c sample1.cpp</rule>
</dependency>
Tree representation
dependency
object
sample1.o
depends
depends
sample1.cpp
sample1.h
rule
g++ -c
Stores name
stores pointers to all adjacent nodes
Mumbai
Ahmbad
Calcutta
Delhi
Madurai
Chennai
End of Chapter