0% found this document useful (0 votes)
3 views

6 Trees an Intro

The document provides an overview of trees as non-linear data structures, detailing their properties, terminologies, and various types such as binary trees. It discusses tree traversal methods including Breadth First Search (BFS) and Depth First Search (DFS), along with their implementations. Additionally, it highlights the applications of trees in computer science, such as in file systems, search trees, and decision trees.

Uploaded by

mwaqarwin
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

6 Trees an Intro

The document provides an overview of trees as non-linear data structures, detailing their properties, terminologies, and various types such as binary trees. It discusses tree traversal methods including Breadth First Search (BFS) and Depth First Search (DFS), along with their implementations. Additionally, it highlights the applications of trees in computer science, such as in file systems, search trees, and decision trees.

Uploaded by

mwaqarwin
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 40

Tree

CSC-114 Data Structure and Algorithms


Outline
 Non-Linear Data Structures
 Tree
 Tree Terminologies
 Memory Representation
 Tree as ADT
 Binary Tree
 Traversal Strategies
 BFS
 DFS
 Pre order
 Post order
 In order

07/04/2017
Non-Linear Data Structure
 Linear vs non-linear classification of data structures is dependent upon how
individual elements are connected to each other.
 All linear data structures have one thing in common that they are sequential
 Lists, Stack, Queue
 In Non-Linear data structures, data elements are not sequential, an element can refer to
more than one elements
 Tree, Graphs

07/04/2017
Graph
 Graph is a non-linear mathematical structure that is defined as G= (v, e), where
v is a set of vertices{v1, v2, …vn} and e is a set of edges {e1,e2,e3,…em}
 Where edge e is a pair of two vertices, means a connection between two vertices

07/04/2017
Tree
 Tree is a connected graph which does not contain cycle. Every vertex has only
one parent.
 Cycle means a path which starts and ends at same node c
b a c d a
b h

d e h e

 In field of computer science, a specific form of trees is more common,


a which is called
rooted trees.
 These rooted trees are directed graphs with left-to-right order b c d
 Some nodes are below, some are above
 You can reach any node from root node e f g h

07/04/2017
Tree
 So, Tree is defined as data structure which presents hierarchical relationship
between data elements. Hierarchical means some elements are below and some
are above from others. Like family tree, folder structure, table of contents

C:/

Program
Windows Users
Files

Java Microsoft Google Guest Public

07/04/2017
Tree: a Data Structure
 Tree is a recursive data structure, it contains patterns that are themselves are
trees.
 A data structure is recursive if it is composed of smaller pieces of it’s own data type.
Such as list and trees.
 a is root of all nodes like b, d etc. a
 b, c, d are also root of their sub trees and so on.
 So, a tree T can be defined recursively as: b d
 Tree T is a collection of nodes such that:
 T is empty/NULL (No node) OR
 e f h
There is a special node called root,
 which can have 0 or more children (T1, T2, T3 …Tn)
 which are also sub-trees themselves.
i j k l
 T1, T2, T3 …Tn are disjoint sub trees ( no shared node)
07/04/2017
Tree Applications
 Tree is an extremely useful data structure, it provides natural organization of
data which exhibits hierarchy, due to their non-linear structure they provide
efficient operations with compare to linear data structures. Few uses are as
follows:
 Disk File System
 Used by operating system to stored folder hierarchy

 Search trees
 More efficient than sorted list

07/04/2017
Tree Applications
 Parse Trees
 Used by compilers to produce machine code

 Decision Trees
 Used in artificial intelligence to build knowledge base

07/04/2017
Tree Applications
 Games
 are used in logic games

 Data Compression
 Huffman coding trees
 Priority Queue
 Heap Tree

 And many more other applications.

07/04/2017
Tree Terminologies
 Node/Vertex
Root a
 One data unit of tree
 Edge
 Internal b c d
Arc/link from one node to other
 Root node
 The top node of tree. A node with no parent e f g h
 Leaf/External node Edge
 Node with no child
Leaf i j k l
 Internal Node:
 Node with child
 Ancestors of Node
 Parent, all grand parents and all great grand parents of node.
 a, b and e are ancestors of i.
07/04/2017
Tree Terminologies
 Descendants of Node
a
 Child , all grand children and great grand children of node.
 i, j, e and f are descendants of b.
 b c d
Sub Tree
 A node within tree with descendants
 Degree of Node: e f g h
 Number of its children
 a’s degree is 3
 i j k l
b, h and e’s degree is 2
 c’s degree is 1
 Degree of Tree
 Maximum degree of any node Sub-tree
 Since a has degree 3 that is maximum so degree of tree is 3
07/04/2017
Tree Terminologies
 Depth/Level of Node Level
a 0
 Number of ancestors or length of path from node to root
 j has depth 3 Level
b c d 1
 c has depth 1
 Length of Path means # of edges on the path from one node to other
Level
 e f g h
Siblings 2

 Nodes with same parent and at same level Level


3
 i and j i j k l
 b and c and d
 Height of Tree
1. Maximum depth of any node3
2. Longest path from root to any leaf node  3
07/04/2017
Tree as ADT
 A tree T provides following basic operations:
 Tree Methods:
 size(root): returns total number of nodes
 isEmpty(root): if tree is empty or not
 root(): returns root node of tree
 Node Methods:
 parent(node): returns parent of node
 children(node): returns list of all child’s of node
 isInternal(node): if node is non-leaf
 isExternal(node):if node is leaf
 isRoot(node): if node is root

07/04/2017
Binary Tree
 Binary Tree is a special tree where each node can have maximum two children.
In other words maximum degree of any node is 2.
 Each node has a left child and a right child. Even if a node has only one child, other
child is still mentioned with NULL.

a General Tree
Binary Tree a

b d b d

h
e f h g i g j

07/04/2017
Binary Tree
 Recursive Definition:
 T is a binary tree if
 T is empty (NULL) OR
 T’s root node has maximum two children's, where each child is itself a binary tree.
 Left child is called left subtree and right child is called right subtree

General Tree
Binary Tree Binary Tree

07/04/2017
Full Binary Tree
 Degree of each node is either 0 or 2.
 Full Tree is also referred as Proper Tree

Full Full Not-Full

 A tree that is not Full/Proper , is called improper or not-full


07/04/2017
Perfect
 A Full/Proper binary tree in which each leaf node has same depth/level.

Perfect & Full Not-Perfect But Full Not Perfect Nor Full

07/04/2017
Complete Binary Tree
 A tree that is completely filled at all levels, except the last level which is filled
from left to right

Complete But Not Full Not-Complete Not-Complete But Full

07/04/2017
Binary Tree
 Maximum nodes at level i of binary tree?
 2i
 Maximum nodes in a binary tree?
 2H+1-1
 If n is total nodes in a binary tree
 H ≈ log(n)
 Number of leaves in a perfect tree?
 2H

07/04/2017
Binary Tree ADT
 In addition to previous function Binary Tree provides additional functions:
 left(node): returns left child of node
 right(node): returns right child of node
 hasLeft(node): tells if a node has left child or not
 hasRight(node): tells if a node has right child or not
 sibling(node): returns sibling of given node
 First find parent, then see it node itself is left or right child

07/04/2017
Binary Tree Implementation
 Linked representation
 Each node has two links left and right
 If root node is null, means tree is empty
 If node’s left, right links are NULL, it means its leaf node
 Optionally, a parent field with a reference to the parent node left data right

left data right left data right

class Node{
data; left data right left data right
Node left;
Node right;
left data right left data right left data right
}
07/04/2017
Binary Tree Implementation
 Array representation
 A fixed size tree can be represented using 1-D array.
 If we know the height of tree, we can define size of array to hold maximum possible
number of nodes  2h+1-1 a 0

 Root of tree  array[0] 1 b g 2


 Left child of root array[1]
 Right child of root array[2] 3 c f 4 5 h 6
 -----
 -----
 Left child of node at index k array[2k+1]
 Right child of node at index k array[2k+2] 0 1 2 3 4 5 6
a b g c f NULL h

07/04/2017
Tree Traversal
 A tree traversal means visiting each node of tree once.
 Due to non-linear structure of tree there is not a single way to traverse node:
1. Breadth First Search
a
2. Depth First Search
 Pre-order
 In-order b g
 Post-order
c f h

d e

07/04/2017
Breadth First Search (BFS)
 Starting from root node, visit all of its children, all of its grand children and all
of its great grand children
 Order of nodes: a b g c f h d e
a
 Nodes at same level must be visited first before nodes of next level
 Also known as level order traversal b g
 Implementation?
 We should store nodes to keep track of them. c f h
 The sequence in which we store them effects the
the sequence in which we retrieve them back d e
 Which data structure can be used to store nodes?
 array, stack or queue

07/04/2017
Breadth First Search (BFS)
a a

b c b d

d e f e f h

g h i i j k l

abcdefghij abdefhijkl

07/04/2017
Breadth First Search (BFS)
 Algorithm: Iterative_BFS(Tree root) a
 Input: root node of Tree.
 Steps:
b g
1. If root is not NULL
2. Set Q =new Queue () c f h
3. Set node = root
4. Q.enqueue(node)
5. While Q is not empty d e
6. node=Q.dequeue()
7. print(node)//print node’s data a h d e
8. If hasLeft(node)
9. Q.enqueue(node.left) b g d e
10. If hasRight(node) g c f e
11. Q.enqueue(node.right)
12. End While c f h
13. End If f h d e
07/04/2017
Recursive BFS
 Recursive_BFS(node, queue)
 Input: root node of Tree, an empty queue
 Steps:
If node is not NULL
Print node
If hasLeft(node)
queue.enqueue(node.left)
If hasRight(node)
queue.enqueue(node.right)
If queue is not Empty
Recursive_BFS(queue.dequeue(), queue)
End if

07/04/2017
Depth First Search (DFS)
 Using the top-down view of the tree, starting from root, go to each sub tree as
far as possible, then back track
 Possible Orders:
a
 Left sub tree and then right sub tree
 abcdefgh
 right sub tree and then left sub tree b g
 aghbfced
 Implementation: c f h
 Can we use a stack instead of queue
d e

07/04/2017
Depth First Search (DFS)
a a

b c b d

d e f e f h

g h i i j k l

abdeghjcfi abeijfdhkl

07/04/2017
Depth First Search (DFS)
 Algorithm: Iterative_DFS(root) a
 Input: root node of Tree.
 Steps:
b g
1. If root is not NULL
2. Set S=new Stack()
3. Set node = root c f h
4. S.push(node)
5. While( S is not empty) d e
6. node=S.pop()
7. Print node
8. If hasRight(node)
9. S.push(node.right) d
10. If hasLeft(node) c e e
11. S.push(node.left)
b f f f f
12. End While
13. End If
A g g g g g g h
07/04/2017
Depth First Variations
 Depth First Search can also be implemented with recursive approach. And depending upon the
order in which we go in depth can bring different variations in order of node traversal. Which are:
 Pre-order (simple DFS)
1. Visit node a
2. Visit left child of node
3. Visit right child of node b g
 Post-order
1. Visit left child of node a
2. Visit right child of node
3. Visit node b g
 In-order
1. Visit left child of node a
2. Visit node
3. Visit right child of node b g

07/04/2017
Pre-order vs. Post-order vs. In-order
 Pre-order (node-left-right)
 abcdefgh
 Post-order (left-right-node) a
 decfbhga
 In-order (left-node-right) b g
 dcebfagh
c f h

d e

07/04/2017
Pre-order vs. Post-order vs. In-order
a a

b d
b c

d e f e f h

g h i i j k l

j
Pre-order: a b d e g h j c f i Pre-order: a b e i j f d h k l
Post-order: d g j h e b i f c a Post-order: i j e f b k l h d a
In-order: dbgejhacif In-order: i e j b f a k h l d
07/04/2017
Tree Traversal-Recursive Algorithms
 Recursive_Preorder(Tree node)  Recursive_Postorder(Tree node)
If node is not NULL If node is not NULL
Print node Recursive_Postorder(node.left)
Recursive_Preorder(node.left) Recursive_Postorder(node.right)
Recursive_Preorder(node.right) Print node
End If End If
 Recursive_Inorder(Tree node)
If node is not NULL
Recursive_Inorder(node.left)
Print node
This is traditional DFS
Recursive_Inorder(node.right)
End If

07/04/2017
Tree Building with Traversal Orders
 Can we build a binary tree if we are given a traversal order?
 Pre-order: 5, 15, 10, 8, 7, 9, 11, 19
 5
Post-order: 10, 8, 15, 11, 19, 9, 7, 5
 In-order: 10, 15, 8, 5, 7, 11, 9, 19 15 7
 What is special about each traversal order?
 How you will decide that which node is root node? 10 8 9
 Which node is left?
 Which node is right? 11 19

36 Saba Anwar, Computer Science Department- CIIT Lahore 04/21/2025


Tree Building with Traversal Orders
 Can we build a general binary tree using one traversal order?
 Will it be unique? Or different trees are possible
 Pre-order: 5, 10
5 5

10 10

 What if another order is also given?


 In-order: 5, 10
 Which tree is correct now?

37 Saba Anwar, Computer Science Department- CIIT Lahore 04/21/2025


Tree Building with Traversal Orders
 We need 2 traversal orders to build a general binary tree. One of them must be
In-order.
 5
Pre-order: 5, 15, 10, 8, 7, 9, 11, 19
 Post-order: 10, 8, 15, 11, 19, 9, 7, 5
15 7
 In-order: 10, 15, 8, 5, 7, 11, 9, 19
1. Find root 10 8 9
 First in Pre-order and last in Post-order
2. Left Nodes 11 19
 nodes on left-side of root node in In-order
3. Right Nodes
 nodes on left-side of root node in In-order
 Repeat
38 Saba Anwar, Computer Science Department- CIIT Lahore 04/21/2025
Tree Building with Traversal Orders
 Pre-order: 5, 15, 10, 8, 7, 9, 11, 19
 Post-order: 10, 8, 15, 11, 19, 9, 7, 5
 In-order: 10, 15, 8, 5, 7, 11, 9, 19

5 50

{10, 15, 8} {7, 11, 9, 19} 15 7

{10} {8} {11, 9, 19}

39 Saba Anwar, Computer Science Department- CIIT Lahore 04/21/2025


HomeWork-2
 For every algorithm, root node is given as input along with any other input (if mentioned).
 To find and return parent of given node?
 To find and return depth/level of given node?
 To find and return depth of tree
 To find if a tree is Full or not?
 To find if two nodes are at same level of tree or not?
 To find and return total number of nodes?
 To check if two trees are equal or not?
 To check if two trees are same or not?
 Two trees are same if they have same shape, but values may vary
 Book Problems:
 8.20
 8.33
 8.45
 Note: book uses word position instead of node.
40 Saba Anwar, Computer Science Department- CIIT Lahore 04/21/2025

You might also like