0% found this document useful (0 votes)
65 views24 pages

Trees

The document defines and explains tree structures including binary trees and binary search trees. It provides definitions for key tree terms like root, leaf, height, depth, and properties of trees. Tree traversal algorithms like inorder, preorder and postorder are described. Finally, binary search tree operations like search, insert and delete are covered with example pseudocode for search that runs in O(h) time where h is tree height.

Uploaded by

zozo torzo
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)
65 views24 pages

Trees

The document defines and explains tree structures including binary trees and binary search trees. It provides definitions for key tree terms like root, leaf, height, depth, and properties of trees. Tree traversal algorithms like inorder, preorder and postorder are described. Finally, binary search tree operations like search, insert and delete are covered with example pseudocode for search that runs in O(h) time where h is tree height.

Uploaded by

zozo torzo
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/ 24

Tree Structures

 Definitions:
o A tree is a connected acyclic graph.

o A disconnected acyclic graph is called a forest

o A tree is a connected digraph with these properties:


 There is exactly one node (Root) with in-degree=0
 All other nodes have in-degree=1
 A leaf is a node with out-degree=0
 There is exactly one path from the root to any leaf

o The degree of a tree is the maximum out-degree of the nodes


in the tree.
o If (X,Y) is a path:
X is an ancestor of Y, and
Y is a descendant of X.
Root

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 1


 Level of a node:

Level

0 or 1

1 or 2

2 or 3

3 or 4

 Height or depth:
o The depth of a node is the number of edges from the root to
the node.
o The root node has depth zero
o The height of a node is the number of edges from the node to
the deepest leaf.
o The height of a tree is a height of the root.
o The height of the root is the height of the tree
o Leaf nodes have height zero
o A tree with only a single node (hence both a root and leaf) has
depth and height zero.
o An empty tree (tree with no nodes) has depth and height −1.
o It is the maximum level of any node in the tree.

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 2


o Example:
Level

0 or 1

1 or 2

2 or 3

3 or 4
Depth=2
Height=0 Depth=2
Depth=1 Height=1
Height=2

o Please note that if you label the level starting from 1, the depth
(height) is level-1 (max level -1)

 Children, Parents, and Siblings

 Subtree

 Properties:
(1) for a tree T =(V,E), where n= V and e= E , we have

e=n-1

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 3


 Binary Trees
o Definitions:
 It is a tree whose degree is  2
 The two children are called left and right children
o Properties:
 Strictly binary:
 Each node has either two children or 0
 Full Binary tree:
 A tree is a full binary tree of depth h iff each node of
level h is a leaf and each intermediate node has left
and right children.

 Complete Binary tree:


 Every intermediate node in levels between 0 and h-2
have 2 children
 Every node in level h-1 has either 2 children or 1
child. If there is one child, then it is a left child.

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 4


 Balanced Binary Tree :
 A tree is a balanced (or height balanced) BT iff for
each node X in T, the depth of the left and right
subtrees of X differ by at most 1.

 Lemma 1:
o The maximum number of nodes on level i of a binary tree is 2i
(starting from level 0).
o The maximum number of nodes in a binary tree of depth k is:
2k+1-1, k>0 (starting from level 0).
 Lemma 2:
o For any non empty binary tree, T, if n0 is the number of leaves
and n2 is the number of nodes of degree 2, then
n0 = n2 + 1
o Proof:
 The total number of nodes in a BT T is: n = n0 + n1 + n2
ni is the number of nodes of degree i (i children)
for i=0, 1, and 2.
 We have e = n - 1 from property 1 where e is the number
of links in T.
 The number of links e can also be computed as follows:
n0 contribute by 0 links
n1 contribute by n1*1 = n1 links
n2 contribute by n2*2 = 2n2 links
 Therefore,
e = n1+ 2n2 = n - 1= n0 + n1 + n2- 1
==> n0 = n2 + 1

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 5


 Representations:
o Sequential
o Linked-list

 Sequential representation:
o For a complete tree of n nodes:

(1) The parent of a node i is:


 
i
if i  1
Parent(i )   2 

 No parent if i  1(i is the root )

(2) The leftchild of a node i is:


2i if 2i  n
Leftchid(i ) 
 Noleftchild if 2i  n

(3) The rightchild of a node i is:


2i  1 if 2i  1  n
Rightchild(i ) 
 No Rightchild if 2i  1 n

 Linked-list representation:

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 6


Binary Tree Traversals

 There are three traversals:


o Inorder: LNR
o Preorder: NLR
o Postorder: LRN

 Inorder Traversal: LNR

 Procedure:

Procedure LNR (t:tree);


Begin
If t=null
then return
else Begin
LNR(t->left);
visit(t-data);
LNR(t->right);
end;

 Complexity:

T(n) = O(n) where n is the number of nodes in T.

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 7


 Example:

2 3

4 5 6 7

8 9 10 11 12

13 14

LNR: 4-8-2-9-5-10-1-13-11-14-6-3-7-12

NLR: 1-2-4-8-5-9-10-3-6-11-13-14-7-12

LRN: 8-4-9-10-5-2-13-14-11-6-12-7-3-1

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 8


Binary Search Tree ADT

 Objective:
o Insertion, deletion, and Find take O(log(n)) where n is the
number of elements in the list.

 Definition:
o Let us assume that every node in a binary search tree (BST) is
assigned a key value X. For every node X in a BST, the keys
in the left subtree of the node containing X are smaller than X
and the keys in the right subtree of the node containing X are
greater than X.

x ≤

Left subtree Right subtree


of X of X
 Example:
R
7

3 10

1 5 9 11

2 4 6 8 12

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 9


 Operations:
o Search or Find
o Find_min
o Find_max
o Insert
o Delete

 Search:

 function:
Node Search(Node T; int x);
Begin
If ( T == null)
then return(null);
else Begin
If (x < T.data)
then return(Search(T.left));
else if (x > T.data)
then return(Search(T.right));
else return(T);
End;
End;

 Complexity:
O(h) where h is the depth of the tree.

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 10


 Insertion in a BST:
o There are three steps:
 create a new node for the element to be inserted
 Search or Find the location at which the new node will be
inserted
 Insert the new node
o Procedure Insert(Node Root; int x)
Begin /* The element to be inserted is x */
/* Create new node */
t = create_node(); /* Allocate space for x */
t.leftChild = null; t.rightChild = null; t.data = x;
/* Search for the insertion location */
p = Root; q = nil;
While (p!=null) do Begin
q = p;
if p.data > x
then p = p.left;
else p = p.right;
End;
/* Insert the new element */
If (q == null) /* Empty tree */
then Root = t;
else Begin
if q.data > x
then q.left = t;
else q.right = t;
End;
End;

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 11


 Complexity:
O(h) where h is the depth of the tree.

 Example:

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 12


 Deletion in a BST:
o There are three cases:
 Node to be deleted has no children (Leaf).
 Node to be deleted has one child.
 Node to be deleted has two children (complicated).

o Case 1: Node to be deleted has no children (Leaf):

Node to be deleted X
R R
7 T 7

3 10 3 10

1 5 9 11 1 5 9 11

2 4 6 8 12 2 4 6 8

 Deletion steps:
//Delete node with value 12 in a BST with root R
//T is the parent of the node that contains 12
T = findParent(R, 12)
//Delete the element.
T.rightChild = null;

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 13


o Case 2: node to be deleted has one child

Y
Y
X Node to be deleted
Z
Z

 Example:
R R
7 7

T 3 10 3 10

1 5 9 11 2 5 9 11

2 4 6 8 4 6 8

 Deletion steps:
//Delete node with value 1 in a BST with root R
//T is the parent of the node that contains 1
T = findParent(R, 1)
//Delete the node
T = T.rightChild; //Since the left child is null.

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 14


 Case 3: node to be deleted has two children

X Node to be deleted

Left Right
Subtree Subtree
o X must be replaced by either its:
- predecessor ( Max in the left subtree)
- successor (Min in the right subtree)
o Example 1:
R R
7 7

10 3 T 10
3 T

S 2 6 9 11
2 5 9 11

4 6 8 4 6 8

Delete(T.rightChild, T.data);
 Deletion steps:
//Delete node with value 5 in a BST with root R
//T is the parent of the node that contains 5
T = findParent(S, 5);
S =findSuccessor(T); //Find the min of the right subtree.
//Delete the node
T.data = S.data;
Delete(T.rightChild, T.data);

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 15


o Tree after deleting node 5:

R
7

3 10

2 6 9 11

4 8

o Example 2: T
T R
R
8
7
3 10
3 10

2 5 9 11
2 5 9 11
S
4 6 8
4 6 8
Delete(T.rightChild, T.data);
 Deletion steps:
//Delete node with value 7 in a BST with root R
//T is the parent of the node that contains 7
T = findParent(S, 7);
S =findSuccessor(T); //Find the min of the right subtree.
//Delete the node
T.data = S.data;
Delete(T.rightChild, T.data);

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 16


o Tree after deleting node 7:

R
8

3 10

2 5 9 11

4 6

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 17


o Procedure Delete(Node Root; int x)
Begin
If (T ==null) then print (“Sorry the element is not found “);
else if (x< T.data)
then Delete(T.leftChild,x); /* Go left */
else if (x>T.data)
then Delete(T.rightChild,x) /* Go Right */
else Begin
If (T.leftChild == null) /* only a right child or none*/
then begin
temp = T; T = T.rightChild; free(temp);
end;
else if (T.rightChild ==null) /* only a left child */
then begin temp = T; T = T.leftChild; end;
else begin /* Case 3: Two children. Replace with successor */
temp = Find_min(T.rightChild);
T.data = temp.data;
Delete(T.rightChild,T.data)
end;
End;
End;

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 18


 Time Complexity:
o If the tree is a complete binary tree with n nodes, then the worst-
case time is O(log n).

o If the tree is very unbalanced (i.e. the tree is a linear chain), the
worst-case time is O(n).

o Luckily, the expected height of a randomly built binary search


tree is O(log n)
 basic operations take time O(log n) on average.

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 19


Threaded Binary Trees

 Motivations:
o To do traversal in languages that do not support recursion
o Non- recursive traversals

 In a binary tree of n nodes there are 2n links out of which n+1


are null links. In case of full tree of depth k, we have n=2 k+1-1. The
number of leaves is 2 k = n  1 . Therefore, the number of null links is:
2
2* n  1 = n+1.
2

 Objective:
o Make use of the null links (by A.J. Perlis & C. Thornton).
o Replace null links by pointers, called threads, to other nodes in
the tree.
 Threads setup:
o If p->right == null
then p->right = the node which would be printed after p (inorder
successor of p) when traversing the tree in
inorder.
o If p->left == null
then p->left = the node which would be printed before p
(inorder predecessor of p) when traversing the
tree in inorder.

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 20


o Example:

B C

D E F G

H I

LNR: H D I B E A F C G

 Implementation:
o How to distinguish between threads and normal pointers?

Leftthread Leftchild Rightchild Rightthread

T Data F

 Application:
o Perform a non-recursive inorder traversal without a stack to
simulate recursion.

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 21


 Code Example
public class BinaryTreeNode {

private int key;


private BinaryTreeNode leftChild;
private BinaryTreeNode rightChild;

public BinaryTreeNode(){
key = 0;
leftChild = null;
rightChild = null;
}
public BinaryTreeNode(int d, BinaryTreeNode left, BinaryTreeNode
right){
key = d;
leftChild = left;
rightChild = right;
}
public int getKey(){
return(key);
}
public BinaryTreeNode getLeftChild(){
return(leftChild);
}
public BinaryTreeNode getRightChild(){
return(rightChild);
}
public void setLeftChild(BinaryTreeNode node){
leftChild = node;
}
public void setRightChild(BinaryTreeNode node){
rightChild = node;
}
}

public class BinarySearchTree {

private BinaryTreeNode root;

public BinarySearchTree(){
this.root = null;
}
public BinaryTreeNode getRoot(){
return(root);
}

private void findPosition(BinaryTreeNode node, BinaryTreeNode start){


int sKey = start.getKey();
if (sKey>node.getKey()){

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 22


if (start.getLeftChild() == null){
start.setLeftChild(node);
}
else{
findPosition(node, start.getLeftChild());
}
}
else{
if (start.getRightChild() == null){
start.setRightChild(node);
}
else{
findPosition(node, start.getRightChild());
}
}
}

public void insertNode(BinaryTreeNode node){


if (root == null){
root = node;
}
else{
findPosition(node, this.root);
}
}

private boolean findElement(BinaryTreeNode node, int x){


if (node == null)
return(false);
if (x == node.getKey())
return(true);
else if (x < node.getKey())
return(findElement(node.getLeftChild(), x));
else
return(findElement(node.getRightChild(), x));
}

public int countLeaves(BinaryTreeNode node) {


if (node == null)
return 0;
else if (node.getLeftChild() == null && node.getRightChild() == null)
return 1;
else
return countLeaves(node.getLeftChild()) +
countLeaves(node.getRightChild());
}
public int computeDepth(BinaryTreeNode node){
if (node == null)
return 0;

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 23


return (1+ Math.min(computeDepth(node.getLeftChild()),
computeDepth(node.getRightChild())));
}
public void inorderPrint(BinaryTreeNode node){
}

public void preorderPrint(BinaryTreeNode node){


}
public int countNodes(BinaryTreeNode node){

public int findMin(BinaryTreeNode node){

}
public int findMax(BinaryTreeNode node){
}

o Programming Assignment:
 Design and implement the missing operations in the Binary
Search Tree ADT:
- findMin
- findMax
- countNodes
- inorderPrint
- preorderPrint

 Test your implementation.

CSci 1112 – Algorithms and Data Structures, A. Bellaachia Page 24

You might also like