CSC258/438 DATA STRUCTURES
Zulaile Mabni
TOPIC 7 BINARY TREE
1
CHAPTER OBJECTIVES
To learn how to use a tree to represent a hierarchical organization of information. To learn how to use recursion to process trees. To understand the different ways of traversing a tree. To understand the difference between binary trees, and binary search trees. To learn how to implement binary trees, and binary search trees using linked data structures and arrays.
Malik D.S.
TREE TERMINOLOGY
A tree consists of a collection of elements or nodes, with each node linked to its successors. The node at the top of a tree is called its root. The links from a node to its successors are called branches. The successors of a node are called its children. The predecessor of a node is called its parent.
Malik D.S.
TREE TERMINOLOGY (CONTINUED)
Each node in a tree has exactly one parent except for the root node, which has no parent. Nodes that have the same parent are siblings. A node that has no children is called a leaf node. A generalization of the parent-child relationship is the ancestor-descendent relationship.
Malik D.S.
BINARY TREES
A binary tree is a hierarchical structure. Definition: A binary tree, T, is either empty or such that:
Malik D.S.
T has a special node called the root node; T has two sets of nodes, LT and RT, called the left subtree and right subtree of T, respectively; LT and RT are binary trees
BINARY TREE
Malik D.S.
BINARY TREE WITH ONE NODE
Malik D.S.
The root node of the binary tree = A
LA = empty RA = empty
7
BINARY TREE WITH TWO NODES
Malik D.S.
BINARY TREE WITH TWO NODES
Malik D.S.
VARIOUS BINARY TREES WITH THREE NODES
10
Malik D.S.
BINARY TREES
Following class defines the node of a binary tree:
protected class BinaryTreeNode { Object info; BinaryTreeNode llink; BinaryTreeNode rlink; }
Malik D.S.
11
NODES
For each node:
Data is stored in info The reference to the left child is stored in llink The reference to the right child is stored in rlink
Malik D.S.
12
GENERAL BINARY TREE
13
Malik D.S.
BINARY TREE DEFINITIONS
Leaf:
node that has no left and right children. Parent: node with at least one child node. Level of a node: number of branches on the path from root to node.
The level of the root node is 0 The level of the children of the root node is 1
Malik D.S.
Height
of a binary tree: The length of the path from the root to the deepest node in the tree. A (rooted) tree with only a node (the root) has a height of zero.
14
HEIGHT OF A BINARY TREE
Recursive algorithm to find height of binary tree: (height(p) denotes height of binary tree with root p):
Malik D.S.
If the binary tree is empty, height is 0 If the binary tree is nonempty:
Find the height of left subtree & right subtree Find the maximum of these two heights and add 1
if(p is NULL)
height(p) = 0
else height(p) = 1 + max(height(p.llink),height(p.rlink))
15
HEIGHT OF A BINARY TREE
Method to implement above algorithm:
Malik D.S.
private int height(BinaryTreeNode p) { if(p == NULL) return 0; else return 1 + max(height(p.llink), height(p.rlink)); }
16
HEIGHT OF BINARY TREE
Malik D.S.
Height = 3
17
SOME TYPES OF BINARY TREES
Expression tree
Each node contains an operator or an operand
Malik D.S.
Huffman tree
Represents Huffman codes for characters that might appear in a text file Huffman code uses different numbers of bits to encode letters as opposed to ASCII or Unicode
Binary search trees
All elements in the left subtree precede those in the right subtree
18
SOME TYPES OF BINARY TREES (CONTINUED)
19
Malik D.S.
FULL AND COMPLETE BINARY TREE
A full binary tree (sometimes proper binary tree or 2-tree) is a tree in which every node has zero or two children except for the leaves. A perfect binary tree (sometimes complete binary tree) is a full binary tree in which all leaves are at the same depth.
20
Malik D.S.
BINARY TREE TRAVERSAL
Must start with the root, then
Visit the node first
Malik D.S.
or
Visit the subtrees first
Three different traversals
Inorder Preorder Postorder
21
TRAVERSALS
Inorder
Traverse the left subtree Visit the node Traverse the right subtree
Malik D.S.
Preorder
Visit the node Traverse the left subtree Traverse the right subtree
22
TRAVERSALS
Postorder
Traverse the left subtree Traverse the right subtree Visit the node
Malik D.S.
23
BINARY TREE: TRAVERSAL
Malik D.S.
Inorder
:BDAC
24
Preorder : A B D C Postorder: D B C A
BINARY TREE: INORDER TRAVERSAL
private void inorder(BinaryTreeNode p) { if(p != NULL) { inorder(p.llink); System.out.println(p.info + ); inorder(p.rlink); } }
25
Malik D.S.
BINARY TREE: PREORDER TRAVERSAL
private void preorder(BinaryTreeNode p) { if(p != NULL) { System.out.println(p.info + ); preorder(p.llink); preorder(p.rlink); } }
26
Malik D.S.
BINARY TREE: POSTORDER TRAVERSAL
private void postorder(BinaryTreeNode p) { if(p != NULL) { postorder(p.llink); postorder(p.rlink); System.out.println(p.info + ); } }
27
Malik D.S.
IMPLEMENTING BINARY TREES: CLASS BINARYTREE METHODS
isEmpty inorderTraversal preorderTraversal postorderTraversal treeHeight treeNodeCount treeLeavesCount destroyTree copyTree
Copy Inorder Preorder postorder Height Max nodeCount leavesCount
28
Malik D.S.
BINARY SEARCH TREES
Data in each node
Larger than the data in its left child Smaller than the data in its right child
Malik D.S.
A binary search tree, t, is either empty or:
T has a special node called the root node T has two sets of nodes, LT and RT, called the left subtree and right subtree of T, respectively Key in root node larger than every key in left subtree and smaller than every key in right subtree LT and RT are binary search trees
29
BINARY SEARCH TREES
30
Malik D.S.
OPERATIONS PERFORMED ON BINARY SEARCH TREES
Determine whether the binary search tree is empty Search the binary search tree for a particular item Insert an item in the binary search tree Delete an item from the binary search tree
31
Malik D.S.
OPERATIONS PERFORMED ON BINARY SEARCH TREES
Find the height of the binary search tree Find the number of nodes in the binary search tree Find the number of leaves in the binary search tree Traverse the binary search tree
32
Malik D.S.
Exercises:
50
30
90
Malik D.S.
12
40
86
100
Determine the order in which the elements would be accessed during an in-order traversal.
33
1. inOrder(t) { if (t is not empty) { inOrder(leftTree(t)); access the root element of t; inOrder(rightTree(t)); } // if } // inOrder traversal Left Root Right
34
Malik D.S.
50
30 12 90
Malik D.S.
40 86
100
In-order traversal ( Left- Node-Right):
Answer: 12, 30, 40, 50, 86, 90, 100
35
2.
postOrder (t) { if (t is not empty) { postOrder(leftTree(t)); postOrder(rightTree(t)); access the root element of t; } // if } // postOrder traversal Left Right Root
36
Malik D.S.
Malik D.S.
Post-order traversal ( Left- Right- Node): Answer: 12 40 30 86 100 90 50
37
3.
preOrder (t) { if (t is not empty) { access the root element of t; preOrder (leftTree (t)); preOrder (rightTree (t)); } // if } // preOrder traversal
Malik D.S.
Root Left Right
38
Malik D.S.
Pre-order traversal( Node- Left- Right): Answer: 50 30 12 40 90 86 100
39
TRAVERSALS OF EXPRESSION TREES
An inorder traversal of an expression tree inserts parenthesis where they belong (infix form) A postorder traversal of an expression tree results in postfix form A preorder traversal of an expression tree results in prefix form
40
Malik D.S.
TRAVERSALS OF EXPRESSION TREES
An inorder traversal of an expression tree inserts parenthesis where they belong. An infix expression is obtained.
41
Malik D.S.
Determine the order in which the elements would be accessed during a post-order traversal. Hint: An operator immediately follows its operands.
+
Malik D.S.
*
42
Answer: X, Y, -, Z, A, B, *, / +
Malik D.S.
Postfix!
43
Determine the order in which the elements would be accessed during a pre-order traversal. Hint: An operator immediately precedes its operands.
+
Malik D.S.
*
44
Malik D.S.
Answer: +, -, X, Y, /, Z, *, A, B
Prefix!
45
SEARCHING A BINARY TREE
46
Malik D.S.
INSERTION INTO A BINARY SEARCH TREE
47
Malik D.S.
add (73); 80
40
90
Malik D.S.
60
48
50
75
After inserting (73)
80 40 90
Malik D.S.
60
50
75
73
49
Given the following data: HP, Compaq, Apple, Sony, Samsung, Compact, Toshiba, Acer, Dell Draw the Binary Search Tree
Malik D.S.
50
BINARY SEARCH TREE DELETION
After deleting the desired item, the resulting tree must be a binary search tree. Four cases (Refer to binary search tree on the next slide):
1) The node to be deleted has no left and right subtrees. Example: Node with data 46
Malik D.S.
2) The node to deleted has no left subtree but has a nonempty right subtree. Example: Node with data 30
3) The node to be deleted has no right subtree but has a nonempty left subtree Example: Node with data 80 4) The node to be deleted has nonempty left and right subtrees. Example: Node with data 50
51
BINARY SEARCH TREES
52
Malik D.S.
REMOVING FROM A BINARY SEARCH TREE
53
Malik D.S.
Exercises:
remove (50);
80 40 90
Malik D.S.
60
50
75
54
73
After removing 50:
remove (40); 80 40 90
Malik D.S.
60
75
55
73
After removing 40:
Malik D.S.
80 60 90
75
73
56
remove (80);
80 60 110
Malik D.S.
75
100
150
73
85
105
57
95
The element 80 has two children, so we cannot simply unlink 80 from the tree: that would create a hole.
Of the elements already in the tree, two could replace 80 (and then have the original deleted) without destroying the binary search tree properties. Which two?
58
Malik D.S.
We can replace 80 with either its predecessor, 75, or its successor, 85. The successor of an element is the leftmost element in the right subtree. The predecessor of an element is the rightmost element in the left subtree. Well choose its successor. Replace 80 with 85, and then remove 85.
59
Malik D.S.
After removing 80:
85 60 110
Malik D.S.
75
100
150
73
95
105
60
CLASS TREESET AND INTERFACE SEARCH TREE
61
Malik D.S.
BINARYSEARCHTREE CLASS
62
Malik D.S.
CHAPTER REVIEW
A tree is a recursive, nonlinear data structure that is used to represent data that is organized as a hierarchy. A binary tree is a collection of nodes with three components: a reference to a data object, a reference to a left subtree, and a reference to a right subtree. In a binary tree used for arithmetic expressions, the root node should store the operator that is evaluated last. A binary search tree is a tree in which the data stored in the left subtree of every node is less than the data stored in the root node, and the data stored in the right subtree is greater than the data stored in the root node.
63
Malik D.S.
REFERENCES
Collin, Williams, Data Structures and The Java Collections Framework, 2nd Edition, McGraw Hill , 2005. Koffman E., Wolfgang P., Objects, Abstraction, Data Structures And Design Using Java, John Wiley & Sons, 2005. Malik D.S, Nair P.S., Data Structures Using Java, Course Technology, 2003.
Malik D.S.
Modified by : Zulaile Mabni (2010)
64