Presentation
Muhammad Irfan Khan (S-31021)
Sheraz Khan (S-31030)
BE(SE) -16
Data structure
Fig 12.8 - Trees
• A tree is a non-linear data structure that consists of a
root node and potentially many levels of additional
nodes that form a hierarchy
• Nodes that have no children are called leaf nodes
• Non-root and non-leaf nodes are called internal
nodes root node
imagine an upside
down tree
internal
nodes
VP VP VP VP
mgr
leaf nodes
Binary Trees
• A binary tree is defined recursively. Either
it is empty (the base case) or it consists of
a root and two subtrees, each of which is a
binary tree
root node
• Binary trees and trees typically are
represented using references as dynamic
links, though it is possible to use fixed
representations like arrays
leaf nodes
Tree Data Structures
• There are a number of applications where
linear data structures are not appropriate.
• Consider a genealogy tree of a family.
Mohammad Aslam Khan
B C
D E F
G H I
Binary Tree
root
B C
D E F
G H I
B C
D E F
Left subtree G H I
Right subtree
Binary Tree
• Recursive definition
A
B C
root
D E F
G H I
Left subtree
Binary Tree
• Recursive definition
A
B C
D E F
root
G H I
Binary Tree
• Recursive definition
A
root
B C
D E F
G H I
Right subtree
Binary Tree
• Recursive definition
A
B C
root
D E F
G H I
B C
D E F
G H I
Not a Tree
• Structures that are not trees.
A
B C
D E F
G H I
Not a Tree
• Structures that are not trees.
A
B C
D E F
G H I
Binary Tree: Terminology
parent
A
D E F
G H I
B C
D E J F
G K H I
Level of a Binary Tree Node
• The level of a node in a binary tree is
defined as follows:
Root has level 0,
Level of any other node is one more than the
level its parent (father).
• The depth of a binary tree is the maximum
level of any leaf in the tree.
Level of a Binary Tree Node
A 0 Level 0
B 1 C 1 Level 1
D 2 E 2 F 2 Level 2
G 3 H 3 I 3 Level 3
Complete Binary Tree
• A complete binary tree of depth d is the strictly
binary all of whose leaves are at level d.
0
A
B 1 C 1
D 2 E 2 F 2 G 2
H 3 I J 3 K L 3 M 3 N 3 O 3
Complete Binary Tree
A Level 0: 20 nodes
B C Level 1: 21 nodes
D E F G Level 2: 22 nodes
H I J K L M N O Level 3: 23 nodes
Complete Binary Tree
• At level k, there are 2k nodes.
• Total number of nodes in the tree of depth
d:
d
20+ 21+ 22 + ………. + 2d = 2j = 2d+1 – 1
j=0
n = 2d+1 – 1
or log2(n+1) = d+1
or d = log2(n+1) – 1
• I.e., the depth of the complete binary tree built
using ‘n’ nodes will be log2(n+1) – 1.
• For example, for n=100,000, log2(100001) is less
than 20; the tree would be 20 levels deep.
• The significance of this shallowness will become
evident later.
Operations on Binary Tree
• There are a number of operations that can
be defined for a binary tree.
• If p is pointing to a node in an existing tree
then
left(p) returns pointer to the left subtree
right(p) returns pointer to right subtree
parent(p) returns the father of p
brother(p) returns brother of p.
info(p) returns content of the node.
Operations on Binary Tree
• There are a number of operations that can
be defined for a binary tree.
• If p is pointing to a node in an existing tree
then
left(p) returns pointer to the left subtree
right(p) returns pointer to right subtree
parent(p) returns the father of p
brother(p) returns brother of p.
info(p) returns content of the node.
Operations on Binary Tree
• In order to construct a binary tree, the
following can be useful:
• setLeft(p,x) creates the left child node of p.
The child node contains the info ‘x’.
• setRight(p,x) creates the right child node
of p. The child node contains the info ‘x’.
Applications of Binary Trees
• A binary tree is a useful data structure
when two-way decisions must be made at
each point in a process.
• For example, suppose we wanted to find
all duplicates in a list of numbers:
14
15 14
14
15
4 14
15
14
4 15
9 14
4 15
14
4 15
7 14
4 15
14
4 15
18 14
4 15
14
4 15
9 18
3 14
4 15
9 18
14
4 15
3 9 18
5 14
4 15
3 9 18
14
4 15
3 9 18
16 14
4 15
3 9 18
14
4 15
3 9 18
7 16
4 14
4 15
3 9 18
7 16
20 14
4 15
3 9 18
7 16
14
4 15
3 9 18
7 16 20
17 14
4 15
3 9 18
7 16 20
17, 9, 14, 5
Searching for Duplicates
14
4 15
3 9 18
7 16 20
5 17
17, 9, 14, 5
Searching for Duplicates
14
4 15
3 9 18
7 16 20
5 17
9, 14, 5
Trace of insert
p
17 q 14
4 15
3 9 18
7 16 20
17, 9, 14, 5
Trace of insert
p
17 14
4 q 15
3 9 18
7 16 20
17, 9, 14, 5
Trace of insert
17 14
4 p 15
q
3 9 18
7 16 20
17, 9, 14, 5
Trace of insert
17 14
4 p 15
3 9 q 18
7 16 20
17, 9, 14, 5
Trace of insert
17 14
4 15
3 9 p 18
q
7 16 20
17, 9, 14, 5
Trace of insert
17 14
4 15
3 9 p 18
7 q 16 20
17, 9, 14, 5
Trace of insert
17 14
4 15
3 9 18
7 p 16 20
q
5
17, 9, 14, 5
Trace of insert
17 14
4 15
3 9 18
7 p 16 20
5 q
17, 9, 14, 5
Trace of insert
14
4 15
3 9 18
7 p 16 20
5 node 17
14
4 15
3 9 18
7 p 16 20
5 node 17
14
4 15
L left right R
subtree subtree
(L,N,R), (L,R,N)
(N,L,R), (N,R,L)
(R,L,N), (R,N,L)
Traversing a Binary Tree
• Three common ways
N node
left right
L subtree subtree R
Preorder: (N,L,R)
Inorder: (L,N,R)
Postorder: (L,R,N)
Traversing a Binary Tree
14
4 15
3 9 18
7 16 20
5 17
Preorder: 14 4 3 9 7 5 15 18 16 17 20
Traversing a Binary Tree
14
4 15
3 9 18
7 16 20
5 17
Inorder: 3 4 5 7 9 14 15 16 17 18 20
Traversing a Binary Tree
14
4 15
3 9 18
7 16 20
5 17
Postorder: 3 5 7 9 4 17 16 20 18 15 14
Level-order Traversal
• There is yet another way of traversing a
binary tree that is not related to recursive
traversal procedures discussed previously.
• In level-order traversal, we visit the nodes
at each level before proceeding to the next
level.
• At each level, we visit the nodes in a left-
to-right order.
Level-order Traversal
14
4 15
3 9 18
7 16 20
5 17
Level-order: 14 4 15 3 9 18 7 16 20 5 17
Level-order Traversal
• There is yet another way of traversing a
binary tree that is not related to recursive
traversal procedures discussed previously.
• In level-order traversal, we visit the nodes
at each level before proceeding to the next
level.
• At each level, we visit the nodes in a left-
to-right order.
Level-order Traversal
14
4 15
3 9 18
7 16 20
5 17
Level-order: 14 4 15 3 9 18 7 16 20 5 17
Level-order Traversal
• How do we do level-order traversal?
• Surprisingly, if we use a queue instead of
a stack, we can visit the nodes in level-
order.
• Here is the code for level-order traversal:
Level-order Traversal
14
4 15
3 9 18
7 16 20
5 17
Queue: 14
Output:
Level-order Traversal
14
4 15
3 9 18
7 16 20
5 17
Queue: 4 15
Output: 14
Level-order Traversal
14
4 15
3 9 18
7 16 20
5 17
Queue: 15 3 9
Output: 14 4
Level-order Traversal
14
4 15
3 9 18
7 16 20
5 17
Queue: 3 9 18
Output: 14 4 15
Level-order Traversal
14
4 15
3 9 18
7 16 20
5 17
Queue: 9 18
Output: 14 4 15 3
Level-order Traversal
14
4 15
3 9 18
7 16 20
5 17
Queue: 18 7
Output: 14 4 15 3 9
Level-order Traversal
14
4 15
3 9 18
7 16 20
5 17
Queue: 7 16 20
Output: 14 4 15 3 9 18
Level-order Traversal
14
4 15
3 9 18
7 16 20
5 17
Queue: 16 20 5
Output: 14 4 15 3 9 18 7
Level-order Traversal
14
4 15
3 9 18
7 16 20
5 17
Queue: 20 5 17
Output: 14 4 15 3 9 18 7 16
Level-order Traversal
14
4 15
3 9 18
7 16 20
5 17
Queue: 5 17
Output: 14 4 15 3 9 18 7 16 20
Level-order Traversal
14
4 15
3 9 18
7 16 20
5 17
Queue: 17
Output: 14 4 15 3 9 18 7 16 20 5
Level-order Traversal
14
4 15
3 9 18
7 16 20
5 17
Queue:
Output: 14 4 15 3 9 18 7 16 20 5 17
Deleting a node in BST
• As is common with many data structures,
the hardest operation is deletion.
• Once we have found the node to be
deleted, we need to consider several
possibilities.
• If the node is a leaf, it can be deleted
immediately.
Deleting a node in BST
• If the node has one child, the node can be
deleted after its parent adjusts a pointer to
bypass the node and connect to inorder
successor.
6
2 8
1 4
3
Deleting a node in BST
• The inorder traversal order has to be
maintained after the delete.
6 6
2 8 2 8
1 4 1 4
3 3
Deleting a node in BST
• The inorder traversal order has to be
maintained after the delete.
6 6 6
2 8 2 8 2 8
1 4 1 4 1 3
3 3
Deleting a node in BST
• The complicated case is when the node to
be deleted has both left and right subtrees.
• The strategy is to replace the data of this
node with the smallest data of the right
subtree and recursively delete that node.
Deleting a node in BST
Delete(2): locate inorder successor
2 8
1 5
4
Inorder
successor
Deleting a node in BST
Delete(2): locate inorder successor
4
Inorder
successor
Deleting a node in BST
Delete(2): copy data from inorder successor
6 6
2 8 3 8
1 5 1 5
3 3
4 4
Deleting a node in BST
Delete(2): remove the inorder successor
6 6 6
2 8 3 8 3 8
1 5 1 5 1 5
3 3 3
4 4 4
Deleting a node in BST
Delete(2)
6 6
3 8 3 8
1 5 1 5
3 4
4
Deleting a node in BST
• As is common with many data structures,
the hardest operation is deletion.
• Once we have found the node to be
deleted, we need to consider several
possibilities.
• If the node is a leaf, it can be deleted
immediately.
Deleting a node in BST
• If the node has one child, the node can be
deleted after its parent adjusts a pointer to
bypass the node and connect to inorder
successor.
6
2 8
1 4
3
Deleting a node in BST
• The inorder traversal order has to be
maintained after the delete.
6 6
2 8 2 8
1 4 1 4
3 3
Deleting a node in BST
• The inorder traversal order has to be
maintained after the delete.
6 6 6
2 8 2 8 2 8
1 4 1 4 1 3
3 3
Deleting a node in BST
• The complicated case is when the node to
be deleted has both left and right subtrees.
• The strategy is to replace the data of this
node with the smallest data of the right
subtree and recursively delete that node.
Deleting a node in BST
Delete(2): locate inorder successor
2 8
1 5
4
Inorder
successor
Deleting a node in BST
Delete(2): locate inorder successor
4
Inorder
successor
Deleting a node in BST
Delete(2): copy data from inorder successor
6 6
2 8 3 8
1 5 1 5
3 3
4 4
Deleting a node in BST
Delete(2): remove the inorder successor
6 6 6
2 8 3 8 3 8
1 5 1 5 1 5
3 3 3
4 4 4
Deleting a node in BST
Delete(2)
6 6
3 8 3 8
1 5 1 5
3 4