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

Chapter 12-Tree

The document discusses tree data structures. It defines a tree as a hierarchical data structure with nodes connected by edges. A tree has a root node and may have child nodes connected to parents. Binary trees restrict nodes to having at most two children. Binary search trees (BSTs) organize data to allow efficient search, with all left subtree nodes less than the parent and right subtree nodes greater. The document describes tree traversal methods including pre-order, in-order, and post-order, and provides C++ code examples for inserting nodes into BSTs and traversing trees.

Uploaded by

Hai Kim Sreng
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
35 views

Chapter 12-Tree

The document discusses tree data structures. It defines a tree as a hierarchical data structure with nodes connected by edges. A tree has a root node and may have child nodes connected to parents. Binary trees restrict nodes to having at most two children. Binary search trees (BSTs) organize data to allow efficient search, with all left subtree nodes less than the parent and right subtree nodes greater. The document describes tree traversal methods including pre-order, in-order, and post-order, and provides C++ code examples for inserting nodes into BSTs and traversing trees.

Uploaded by

Hai Kim Sreng
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 30

ATTENDANCE RECORD

https://forms.gle/LEnzwCiiv7ujdDV88
Start: 9:10am
1
Data structure and
Programming II
Chapter 12: Tree data structure

Advanced data structure


2
Outline

▪ Data structure
▪ Linear Vs. Non linear

▪ What is Tree? Binary tree? Binary search tree (BST)?

▪ What are Tree operations?

▪ Traversal of Tree

▪ How to implement Tree in C++

▪ Examples

3
Data structure
❑ Linear Data Structure

▪ Data structure helps to store and organize data in computer

▪ Linear data structure stores data in such a way that the data can be accessed
sequentially (continuous)
▪ Array, linked list, stack queue a[index] a[0] a[1] a[2] a[3]
Data element 5 7 2 -1
Address 0xefabc1 0xefabc3 0xefabc5 0xefabc7

4
Linear Vs. Non-linear data structure
❑ Comparison

Factor Linear data structure Non-linear data structure


How data is stored Data elements construct a Does not arrange data consecutively but
sequence of a linear list. arrange in sorted order.
Traversal of data ▪ Data elements are visited ▪ Traversal of data elements and
sequentially insertion/deletion are not done
▪ Traversal of element is easy sequentially
▪ Traversal of element is difficult

Implementation Simple Complex


Levels Single level of elements Multiple levels of elements (hierarchical)
Memory utilization Ineffective Effective
Example Array, linked list, stack, queue Tree, graph

5
Tree
❑ Definition

▪ A tree is a hierarchical (non-linear) data structure defined on a set of


elements called nodes
root

▪ A tree can be empty or composed of nodes


▪ The top-level node is called root,
while other nodes are sub-tree

An example of a tree

6
Tree
❑ Relation of Tree

▪ Root : top element

▪ Children : have same parents,


grant parents, great grant parents, …

▪ Parents : have children

▪ Siblings : have same parent How many leaves are there?


=> 6
▪ Leaf : is element that has no children
What are they?
▪ Remark: In particular, leaf element has pointer points to NULL
=> 4, 9, 10, 6, 11, 8
7
Relation of Tree
❑ Edge Vs. Depth Vs. Height
▪ Edge (path)
▪ An edge is a line connected two nodes together
▪ If a tree have N nodes, then it has (N-1) edges

▪ Depth of node x
▪ Depth of node x is number of edges from x to root
▪ Note: Depth of root is 0

▪ Height of node x
▪ Height of node x is number of edges on longest path from x to a leaf

▪ Remark: How many edges? => 10 edges


▪ Height of a tree = depth of a tree = longest path of the tree
What is the depth of node 7? => 2
What is the height of node 1? => 3
▪ Size of a tree is the number of elements (nodes)
▪ Branch is any path from the root to a leaf

8
Tree applications
❑ Some examples

1. Store hierarchical data (file system)

2. Organize data for quick search, insertion, deletion


▪ Binary search tree (BST)

3. Dictionary

4. Network routing algorithm

9
Binary Tree
❑ Definition

▪ Each node can have at most 2 children

▪ A node has left and/or right child

▪ A leaf node has no left or right child.


▪ It has only NULL

▪ Types of Binary Tree


1. Strict/proper/full binary tree
2. Complete binary tree
3. Perfect binary tree

10
Strict/proper/full Binary Tree
❑ Definition

▪ Each node can have either 2 or 0 child

▪ It can not have only one left or right child

11
Complete Binary Tree
❑ Definition

▪ A complete binary tree is a binary tree in which every level, except possibly
the last level, is completely filled and all nodes are as far left as possible.

12
Perfect Binary Tree
❑ Definition

▪ All levels are completed filled and balanced

13
Tree Implementation

14
Tree implementation
❑ There are 2 types of implementation
struct Node{
1. Dynamically created nodes int data;
struct Node *left;
struct node *right;
2. Array
};
▪ It work only for Perfect Binary Tree

▪ For node at index i


▪ Left child’s index = 2i + 1

▪ Right child’s index = 2i + 2

15
Binary Search Tree (BST)
❑ Definition
▪ A BST is a binary tree that is constructed in such a way that it is
easy to search for the values it contains

▪ Rules in BST
❖ All values less than (or equal) to root value are stored in the left subtree
❖ All values greater than the root are stored in the right subtree

▪ Example: Suppose we have number 15 as root. We want to add 10, 20, 8, 12, 17, 25 to the tree.
▪ 10<15 => 10 is inserted to left of the root
▪ 20>15 => 20 is inserted to right of the root
▪ 8<15 => 8 goes left
▪ 8<10 => 8 goes left

▪ … etc.
16
Insert a node in BST
❑ Definition

▪ To insert a new item in a tree, we should check that there is no duplication


▪ If a new value is less than the current node’s value
▪ Go to the left subtree
▪ Else,
▪ Go to the right subtree

▪ Remark:
▪ With this simple rule, the algorithm reaches a node (leaf) which has no left/right subtree

▪ By the moment a place for insertion is found, we can say that a new value has no
duplicate in the tree

17
Insert a node in BST
❑ Example

▪ Given a tree below on the left. How to add node of 4 to this tree?

18
Insert data to a tree by knowing the tree’s root

1 Node *insert(Node *root, int data){


2 if(root==NULL){
3 root=new Node;
4 root->left=NULL; Insert data
5 root->right=NULL;
6 root->data=data;
7 }else if(data < root->data){
Go left
8 root->left = insert(root->left, data);
9 }else if(data > root->data){
Go right
10 root->right = insert(root->right, data);
11 }
12 return root;
13 }
19
Traversal of Binary Tree
❑ Definition

▪ Traversal of a tree is a way that is used to visit each node in the tree

▪ 2 main types of tree traversal


1. Breadth-first (level-order) traversal
▪ FDJBEGKACIH

2. Depth-first traversal
▪ Pre-order
▪ In-order
▪ Post-order

20
Depth-first Traversal
1. Pre-order
2. In-order
3. Post-order

21
Pre-order Traversal
❑ Definition

▪ It follows data-left-right order (DLR)

▪ <root’s data><left><right>
▪ FDBACEJGIHK

void preorder(Node *root){


if(root!=NULL){
cout<<root->data;
preorder(root->left);
preorder(root->right);
}
}

22
In-order Traversal
❑ Definition

▪ It follows left-data-right order (LDR)

▪ <left>< root’s data ><right>


▪ ABCDEFGHIJK

void inorder(Node *root){


if(root!=NULL){
inorder(root->left);
cout<<root->data;
inorder(root->right);
}
}

23
Post-order Traversal
❑ Definition

▪ It follows left-right-data order (LRD)

▪ <left><right><root’s data>
▪ ACBEDHIGKJF

void postorder(Node *root){


if(root!=NULL){
postorder(root->left);
postorder(root->right);
cout<<root->data;
}
}

24
Practice: Tree traversal

What are the outputs?


a. Pre-order traversal
b. In-order traversal
c. Post-order traversal

Outputs:

25
Search for an Element in BST
❑ Definition

▪ Loop to each node and compare the data

bool search(Node *root, int data){


if(root == NULL){
return false;
}else if(data == root->data){
return true;
}else if(data > root->data){
6
return search(root->right, data);
}else if(data < root->data){
return search(root->left, data);
}
}
26
Combination of codes for implementing a tree
1 int getSize(Node *root){ bool search(Node *root, char data){ 3
struct Node{ if (root == NULL){
if(root==NULL){
char data; return 0;
}else{ return false;
struct Node *left; return (1 + getSize(root->left)
struct Node *right; + getSize(root->right)); }else if(data == root->data){
}
}; } return true;
}else if(data >= root->data){ int main(){ 5
2 return search(root->right, data); Node *root=NULL;
Node *insert(Node *root, char data){ }else if(data <= root->data){ //root=new Node; //error, no need
if(root==NULL){ root = insert(root, 'F');
return search(root->left, data);
root = insert(root, 'D');
root=new Node( ); } root = insert(root, 'J');
} root = insert(root, 'B');
root->left = NULL;
root = insert(root, 'E');
root->right = NULL; root = insert(root, 'G');
void preorder(Node *root){ root = insert(root, 'K');
root->data=data; 4 root = insert(root, 'A');
if(root!=NULL){
}else if(data < root->data){ root = insert(root, 'C');
cout<<root->data<<“ ”; root = insert(root, 'I');
root->left = insert(root->left, data); preorder(root->left); root = insert(root, 'H');
}else if(data > root->data){ preorder(root); cout<<endl;
preorder(root->right);
}
root->right= insert(root->right, data); }
} Output: F D B A C E J G I H K
}
return root;
}
In-class activity: 27
Now display using in-order and post-order traversal?
Q and A

28
More practices: What are the outputs of post-order, in-order, and
post-order traversal for each tree?

a) b)

29
Practice
❑ Exercise

1. Write a program to create the tree below.


a. Display this tree using an in-order traversal.

b. Keep asking a user to input a number and search whether it is in the tree.
▪ If exist in the tree, then display a message
▪ “This number n is in the tree”.

▪ Otherwise, display a message


▪ “n does not exist in the tree”

30

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy