0% found this document useful (0 votes)
1K views

Binary Trees: Data Structures and Algorithms in Java

This chapter discusses binary trees and binary search trees. It covers implementing and traversing binary trees, as well as searching, inserting, and deleting nodes from binary search trees. Various tree traversal algorithms are presented, including breadth-first, depth-first, inorder, preorder and postorder traversals. Self-adjusting tree structures like balanced binary search trees and heaps are also introduced.

Uploaded by

Lovely Ever
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views

Binary Trees: Data Structures and Algorithms in Java

This chapter discusses binary trees and binary search trees. It covers implementing and traversing binary trees, as well as searching, inserting, and deleting nodes from binary search trees. Various tree traversal algorithms are presented, including breadth-first, depth-first, inorder, preorder and postorder traversals. Self-adjusting tree structures like balanced binary search trees and heaps are also introduced.

Uploaded by

Lovely Ever
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 58

Chapter 6

Binary Trees

Data Structures and Algorithms in Java


Objectives
Discuss the following topics:
• Trees, Binary Trees, and Binary Search Trees
• Implementing Binary Trees
• Searching a Binary Search Tree
• Tree Traversal
• Insertion
• Deletion

Data Structures and Algorithms in Java 2


Objectives (continued)
Discuss the following topics:
• Balancing a Tree
• Self-Adjusting Trees
• Heaps
• Polish Notation and Expression Trees
• Case Study: Computing Word Frequencies

Data Structures and Algorithms in Java 3


Trees, Binary Trees, and Binary
Search Trees
• A tree is a data type that consists of nodes and
arcs
• These trees are depicted upside down with the
root at the top and the leaves (terminal nodes)
at the bottom
• The root is a node that has no parent; it can
have only child nodes
• Leaves have no children (their children are null)

Data Structures and Algorithms in Java 4


Trees, Binary Trees, and Binary
Search Trees (continued)
• Each node has to be reachable from the root
through a unique sequence of arcs, called a
path
• The number of arcs in a path is called the length
of the path
• The level of a node is the length of the path from
the root to the node plus 1, which is the number
of nodes in the path
• The height of a nonempty tree is the maximum
level of a node in the tree

Data Structures and Algorithms in Java 5


Trees, Binary Trees, and Binary
Search Trees (continued)

Figure 6-1 Examples of trees

Data Structures and Algorithms in Java 6


Trees, Binary Trees, and Binary
Search Trees (continued)

Figure 6-2 Hierarchical structure of a university shown as a tree

Data Structures and Algorithms in Java 7


Trees, Binary Trees, and Binary
Search Trees (continued)
• An orderly tree is where all elements are stored
according to some predetermined criterion of
ordering

Figure 6-3 Transforming (a) a linked list into (b) a tree


Data Structures and Algorithms in Java 8
Trees, Binary Trees, and Binary
Search Trees (continued)
• A binary tree is a tree whose nodes have two
children (possibly empty), and each child is
designated as either a left child or a right child

Figure 6-4 Examples of binary trees

Data Structures and Algorithms in Java 9


Trees, Binary Trees, and Binary
Search Trees (continued)
• In a complete binary tree, all nonterminal
nodes have both their children, and all leaves
are at the same level
(If all the nodes at all levels except the last had
two nonnull children, then there would be 2i
nodes at level i+1)
• A decision tree is a binary tree in which all
nodes have either zero or two nonempty children

Data Structures and Algorithms in Java 10


Trees, Binary Trees, and Binary
Search Trees (continued)

Figure 6-5 Adding a leaf to tree (a), preserving the relation of the
number of leaves to the number of nonterminal nodes (b)
Data Structures and Algorithms in Java 11
Trees, Binary Trees, and Binary
Search Trees (continued)

Figure 6-6 Examples of binary search trees

Binary Search Trees (BST), also called ordered binary trees has the
ff. property: For each node n of the tree, all values stored in its left
subtree are less than value v stored in n, and all values stored in the
right subtree are greater than v.

Data Structures and Algorithms in Java 12


Implementing Binary Trees
• Binary trees can be implemented in at least two
ways:
– As arrays
– As linked structures
• To implement a tree as an array, a node is
declared as an object with an information field
and two “reference” fields

Data Structures and Algorithms in Java 13


Implementing Binary Trees
(continued)

Figure 6-7 Array representation of the tree in Figure 6.6c

Data Structures and Algorithms in Java 14


Implementing Binary Trees
(continued)

Figure 6-8 Implementation of a generic binary search tree


Data Structures and Algorithms in Java 15
Implementing Binary Trees
(continued)

Figure 6-8 Implementation of a generic binary search tree


(continued)
Data Structures and Algorithms in Java 16
Implementing Binary Trees
(continued)

Figure 6-8 Implementation of a generic binary search tree


(continued)
Data Structures and Algorithms in Java 17
Searching a Binary Search Tree

Figure 6-9 A function for searching a binary search tree

Data Structures and Algorithms in Java 18


Searching a Binary Search Tree
(continued)
• The internal path length (IPL) is the sum of all
path lengths of all nodes
• It is calculated by summing Σ(i – 1)li over all
levels i, where li is the number of nodes on
level I
• A depth of a node in the tree is determined by
the path length
• An average depth, called an average path
length, is given by the formula IPL/n, which
depends on the shape of the tree
Data Structures and Algorithms in Java 19
Tree Traversal
• Tree traversal is the process of visiting each
node in the tree exactly one time
• Breadth-first traversal is visiting each node
starting from the lowest (or highest) level and
moving down (or up) level by level, visiting
nodes on each level from left to right (or from
right to left)

Data Structures and Algorithms in Java 20


Breadth-First Traversal

Figure 6-10 Top-down, left-to-right, breadth-first traversal


implementation
Data Structures and Algorithms in Java 21
Depth-First Traversal
• Depth-first traversal proceeds as far as
possible to the left (or right), then backs up until
the first crossroad, goes one step to the right (or
left), and again as far as possible to the left (or
right)
– V — Visiting a node
– L — Traversing the left subtree
– R — Traversing the right subtree

Data Structures and Algorithms in Java 22


Depth-First Traversal (continued)

Figure 6-11 Depth-first traversal implementation


Data Structures and Algorithms in Java 23
Depth-First Traversal (continued)

Figure 6-12 Inorder tree traversal

Data Structures and Algorithms in Java 24


Depth-First Traversal (continued)

Figure 6-13 Details of several of the first steps of inorder traversal


Data Structures and Algorithms in Java 25
Depth-First Traversal (continued)

Figure 6-14 Changes in the run-time stack during inorder traversal


Data Structures and Algorithms in Java 26
Depth-First Traversal (continued)

Figure 6-15 A nonrecursive implementation of preorder tree traversal

Data Structures and Algorithms in Java 27


Stackless Depth-First Traversal
• Threads are references to the predecessor and
successor of the node according to an inorder
traversal
• Trees whose nodes use threads are called
threaded trees

Data Structures and Algorithms in Java 28


Stackless Depth-First Traversal
(continued)

Figure 6-18 (a) A threaded tree and (b) an inorder traversal’s path in
a threaded tree with right successors only

Data Structures and Algorithms in Java 29


Stackless Depth-First Traversal
(continued)

Figure 6-19 Implementation of the threaded tree and the


inorder traversal of a threaded tree
Data Structures and Algorithms in Java 30
Stackless Depth-First Traversal
(continued)

Figure 6-19 Implementation of the threaded tree and the


inorder traversal of a threaded tree (continued)
Data Structures and Algorithms in Java 31
Stackless Depth-First Traversal
(continued)

Figure 6-19 Implementation of the threaded tree and the


inorder traversal of a threaded tree (continued)

Data Structures and Algorithms in Java 32


Traversal Through Tree
Transformation

Figure 6-20 Implementation of the Morris algorithm for inorder traversal


Data Structures and Algorithms in Java 33
Traversal Through Tree
Transformation (continued)

Figure 6-21 Tree traversal with the Morris method

Data Structures and Algorithms in Java 34


Traversal Through Tree
Transformation (continued)

Figure 6-21 Tree traversal with the Morris method (continued)

Data Structures and Algorithms in Java 35


Traversal Through Tree
Transformation (continued)

Figure 6-21 Tree traversal with the Morris method (continued)

Data Structures and Algorithms in Java 36


Insertion

Figure 6-22 Inserting nodes into binary search trees


Data Structures and Algorithms in Java 37
Insertion (continued)

Figure 6-23 Implementation of the insertion algorithm

Data Structures and Algorithms in Java 38


Insertion (continued)

Figure 6-24 Implementation of the algorithm to insert nodes


into a threaded tree
Data Structures and Algorithms in Java 39
Insertion (continued)

Figure 6-24 Implementation of the algorithm to insert nodes


into a threaded tree (continued)

Data Structures and Algorithms in Java 40


Insertion (continued)

Figure 6-25 Inserting nodes into a threaded tree

Data Structures and Algorithms in Java 41


Deletion
• There are three cases of deleting a node from
the binary search tree:
– The node is a leaf; it has no children
– The node has one child
– The node has two children

Data Structures and Algorithms in Java 42


Deletion (continued)

Figure 6-26 Deleting a leaf

Figure 6-27 Deleting a node with one child

Data Structures and Algorithms in Java 43


Deletion by Merging
• Making one tree out of the two subtrees of the
node and then attaching it to the node’s parent is
called deleting by merging

Figure 6-28 Summary of deleting by merging


Data Structures and Algorithms in Java 44
Deletion by Merging (continued)

Figure 6-29 Implementation of algorithm for deleting by merging


Data Structures and Algorithms in Java 45
Deletion by Merging (continued)

Figure 6-29 Implementation of algorithm for deleting by merging


(continued)

Data Structures and Algorithms in Java 46


Deletion by Merging (continued)

Figure 6-30 Details of deleting by merging

Data Structures and Algorithms in Java 47


Deletion by Merging (continued)

Figure 6-31 The height of a tree can be (a) extended or


(b) reduced after deleting by merging

Data Structures and Algorithms in Java 48


Deletion by Merging (continued)

Figure 6-31 The height of a tree can be (a) extended or


(b) reduced after deleting by merging (continued)

Data Structures and Algorithms in Java 49


Deletion by Copying
• If the node has two children, the problem can be
reduced to:
– The node is a leaf
– The node has only one nonempty child
• Solution: replace the key being deleted with its
immediate predecessor (or successor)
• A key’s predecessor is the key in the rightmost
node in the left subtree

Data Structures and Algorithms in Java 50


Deletion by Copying (continued)

Figure 6-32 Implementation of an algorithm for deleting by copying

Data Structures and Algorithms in Java 51


Deletion by Copying

Figure 6-32 Implementation of an algorithm for deleting by copying


(continued)

Data Structures and Algorithms in Java 52


Deletion by Copying

Figure 6-32 Implementation of an algorithm for deleting by copying


(continued)

Data Structures and Algorithms in Java 53


Deletion by Copying (continued)

Figure 6-33 Deleting by copying


Data Structures and Algorithms in Java 54
Balancing a Tree
• A binary tree is height-balanced or balanced if
the difference in height of both subtrees of any
node in the tree is either zero or one
• A tree is considered perfectly balanced if it is
balanced and all leaves are to be found on one
level or two levels

Data Structures and Algorithms in Java 55


Balancing a Tree (continued)

Figure 6-34 Different binary search trees with the same information

Data Structures and Algorithms in Java 56


Balancing a Tree (continued)

Figure 6-35 Maximum number of nodes in binary trees of


different heights
Data Structures and Algorithms in Java 57
Balancing a Tree (continued)

Figure 6-36 Creating a binary search tree from an ordered array


Data Structures and Algorithms in Java 58

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