c++ programming: program design including data structures, fourth edition
DESCRIPTION
C++ Programming: Program Design Including Data Structures, Fourth Edition. Chapter 20: Binary Trees. Objectives. In this chapter, you will: Learn about binary trees Explore various binary tree traversal algorithms Learn how to organize data in a binary search tree - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/1.jpg)
C++ Programming:Program Design Including Data Structures, Fourth Edition
Chapter 20: Binary Trees
![Page 2: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/2.jpg)
Objectives
In this chapter, you will:• Learn about binary trees• Explore various binary tree traversal algorithms• Learn how to organize data in a binary search
tree• Learn how to insert and delete items in a
binary search tree• Explore nonrecursive binary tree traversal
algorithms
C++ Programming: Program Design Including Data Structures, Fourth Edition 2
![Page 3: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/3.jpg)
Binary Trees
C++ Programming: Program Design Including Data Structures, Fourth Edition 3
![Page 4: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/4.jpg)
Binary Trees (continued)
C++ Programming: Program Design Including Data Structures, Fourth Edition 4
Right child of ALeft child of A
Root node, andParent of B and C
Directed edge,directed branch, orbranch
Node
Empty subtree(F’s right subtree)
![Page 5: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/5.jpg)
![Page 6: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/6.jpg)
![Page 7: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/7.jpg)
![Page 8: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/8.jpg)
![Page 9: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/9.jpg)
Binary Trees (continued)
• Every node has at most two children• A node:
− Stores its own information
− Keeps track of its left subtree and right subtree• lLink and rLink pointers
C++ Programming: Program Design Including Data Structures, Fourth Edition 9
![Page 10: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/10.jpg)
Binary Trees (continued)
• A pointer to the root node of the binary tree is stored outside the tree in a pointer variable
C++ Programming: Program Design Including Data Structures, Fourth Edition 10
![Page 11: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/11.jpg)
Binary Trees (continued)
• Leaf: node that has no left and right children• U is parent of V if there’s a branch from U to V• There’s a unique path from root to every node• Length of a path: number of branches on path• Level of a node: number of branches on the
path from the root to the node− The level of the root node of a binary tree is 0
• Height of a binary tree: number of nodes on the longest path from the root to a leaf
C++ Programming: Program Design Including Data Structures, Fourth Edition 11
![Page 12: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/12.jpg)
A leaf
A is the parent of B and C
ABDG is a path (of length 3) from node A to node G
The longest path from root to a leaf is ABDGIThe number of nodes on this path is 5 the height of the tree is 5
![Page 13: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/13.jpg)
Binary Trees (continued)
• How can we calculate the height of a binary tree?
• This is a recursive algorithm:
C++ Programming: Program Design Including Data Structures, Fourth Edition 13
![Page 14: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/14.jpg)
Copy Tree
C++ Programming: Program Design Including Data Structures, Fourth Edition 14
![Page 15: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/15.jpg)
Binary Tree Traversal
• Inorder traversal− Traverse the left subtree− Visit the node− Traverse the right subtree
• Preorder traversal− Visit the node− Traverse the left subtree− Traverse the right subtree
C++ Programming: Program Design Including Data Structures, Fourth Edition 15
![Page 16: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/16.jpg)
Binary Tree Traversal (continued)
• Postorder traversal− Traverse the left subtree− Traverse the right subtree− Visit the node
C++ Programming: Program Design Including Data Structures, Fourth Edition 16
![Page 17: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/17.jpg)
Binary Tree Traversal (continued)
• Inorder sequence: listing of the nodes produced by the inorder traversal of the tree
• Preorder sequence: listing of the nodes produced by the preorder traversal of the tree
• Postorder sequence: listing of the nodes produced by the postorder traversal of the tree
C++ Programming: Program Design Including Data Structures, Fourth Edition 17
![Page 18: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/18.jpg)
Binary Tree Traversal (continued)
• Inorder sequence: B D A C• Preorder sequence: A B D C• Postorder sequence: D B C A
C++ Programming: Program Design Including Data Structures, Fourth Edition 18
![Page 19: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/19.jpg)
![Page 20: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/20.jpg)
Implementing Binary Trees
• Typical operations:− Determine whether the binary tree is empty− Search the binary tree for a particular item− Insert an item in the binary tree− Delete an item from the binary tree− Find the height of the binary tree− Find the number of nodes in the binary tree− Find the number of leaves in the binary tree− Traverse the binary tree− Copy the binary tree
C++ Programming: Program Design Including Data Structures, Fourth Edition 20
![Page 21: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/21.jpg)
![Page 22: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/22.jpg)
![Page 23: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/23.jpg)
![Page 24: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/24.jpg)
![Page 25: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/25.jpg)
![Page 26: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/26.jpg)
![Page 27: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/27.jpg)
Binary Search Trees
• We can traverse the tree to determine whether 53 is in the binary tree this is slow
C++ Programming: Program Design Including Data Structures, Fourth Edition 27
![Page 28: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/28.jpg)
Binary Search Trees (continued)
C++ Programming: Program Design Including Data Structures, Fourth Edition 28
![Page 29: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/29.jpg)
Binary Search Trees (continued)
• Every binary search tree is a binary tree
C++ Programming: Program Design Including Data Structures, Fourth Edition 29
![Page 30: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/30.jpg)
Binary Search Trees (continued)
C++ Programming: Program Design Including Data Structures, Fourth Edition 30
![Page 31: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/31.jpg)
![Page 32: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/32.jpg)
Search
C++ Programming: Program Design Including Data Structures, Fourth Edition 32
![Page 33: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/33.jpg)
Insert
C++ Programming: Program Design Including Data Structures, Fourth Edition 33
![Page 34: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/34.jpg)
Insert (continued)
C++ Programming: Program Design Including Data Structures, Fourth Edition 34
![Page 35: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/35.jpg)
Delete
C++ Programming: Program Design Including Data Structures, Fourth Edition 35
![Page 36: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/36.jpg)
Delete (continued)
• The delete operation has four cases:− The node to be deleted is a leaf
− The node to be deleted has no left subtree
− The node to be deleted has no right subtree
− The node to be deleted has nonempty left and right subtrees
C++ Programming: Program Design Including Data Structures, Fourth Edition 36
![Page 37: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/37.jpg)
![Page 38: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/38.jpg)
![Page 39: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/39.jpg)
![Page 40: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/40.jpg)
![Page 41: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/41.jpg)
![Page 42: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/42.jpg)
Delete (continued)
• To delete an item from the binary search tree, we must do the following:− Find the node containing the item (if any) to be
deleted
− Delete the node
C++ Programming: Program Design Including Data Structures, Fourth Edition 42
![Page 43: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/43.jpg)
![Page 44: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/44.jpg)
![Page 45: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/45.jpg)
![Page 46: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/46.jpg)
![Page 47: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/47.jpg)
Binary Search Tree: Analysis
• Let T be a binary search tree with n nodes, where n > 0
• Suppose that we want to determine whether an item, x, is in T
• The performance of the search algorithm depends on the shape of T
• In the worst case, T is linear
C++ Programming: Program Design Including Data Structures, Fourth Edition 47
![Page 48: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/48.jpg)
Binary Search Tree: Analysis (continued)
• Worst case behavior: T is linear– O(n) key comparisons
C++ Programming: Program Design Including Data Structures, Fourth Edition 48
![Page 49: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/49.jpg)
Binary Search Tree: Analysis (continued)
• Average-case behavior:− There are n! possible orderings of the keys
• We assume that orderings are possible
− S(n) and U(n): number of comparisons in average successful and unsuccessful case, respectively
C++ Programming: Program Design Including Data Structures, Fourth Edition 49
![Page 50: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/50.jpg)
Binary Search Tree: Analysis (continued)
C++ Programming: Program Design Including Data Structures, Fourth Edition 50
![Page 51: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/51.jpg)
Nonrecursive Binary Tree Traversal Algorithms
• The traversal algorithms discussed earlier are recursive
• This section discusses the nonrecursive inorder, preorder, and postorder traversal algorithms
C++ Programming: Program Design Including Data Structures, Fourth Edition 51
![Page 52: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/52.jpg)
Nonrecursive Inorder Traversal
• For each node, the left subtree is visited first, then the node, and then the right subtree
C++ Programming: Program Design Including Data Structures, Fourth Edition 52
Will be visited first
![Page 53: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/53.jpg)
![Page 54: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/54.jpg)
Nonrecursive Preorder Traversal
• For each node, first the node is visited, then the left subtree, and then the right subtree
C++ Programming: Program Design Including Data Structures, Fourth Edition 54
![Page 55: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/55.jpg)
Nonrecursive Postorder Traversal
• Visit order: left subtree, right subtree, node• We must indicate to the node whether the left
and right subtrees have been visited− Solution: other than saving a pointer to the
node, save an integer value of 1 before moving to the left subtree and value of 2 before moving to the right subtree
− When the stack is popped, the integer value associated with that pointer is popped as well
C++ Programming: Program Design Including Data Structures, Fourth Edition 55
![Page 56: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/56.jpg)
Binary Tree Traversal and Functions as Parameters
• In a traversal algorithm, “visiting” may mean different things− Example: output value, update value in some
way
• Problem: How do we write a generic traversal function?− Writing a specific traversal function for each
type of “visit” would be cumbersome
• Solution: pass a function as a parameter to the traversal function
C++ Programming: Program Design Including Data Structures, Fourth Edition 56
![Page 57: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/57.jpg)
Binary Tree Traversal and Functions as Parameters (continued)
• In C++, a function name without parentheses is considered a pointer to the function
• To specify a function as a formal parameter to another function:− Specify the function type, followed by name as
a pointer, followed by the parameter types
C++ Programming: Program Design Including Data Structures, Fourth Edition 57
![Page 58: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/58.jpg)
![Page 59: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/59.jpg)
![Page 60: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/60.jpg)
Summary
• A binary tree is either empty or it has a special node called the root node− If the tree is nonempty, the root node has two sets
of nodes (left and right subtrees), such that the left and right subtrees are also binary trees
• The node of a binary tree has two links in it• A node in the binary tree is called a leaf if it has
no left and right children• A node U is called the parent of a node V if there
is a branch from U to V
C++ Programming: Program Design Including Data Structures, Fourth Edition 60
![Page 61: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/61.jpg)
Summary (continued)
• Level of a node: number of branches on the path from the root to the node− The level of the root node of a binary tree is 0
− The level of the children of the root is 1
• Height of a binary tree: number of nodes on the longest path from the root to a leaf
C++ Programming: Program Design Including Data Structures, Fourth Edition 61
![Page 62: C++ Programming: Program Design Including Data Structures, Fourth Edition](https://reader036.vdocuments.us/reader036/viewer/2022062309/56814f08550346895dbc9a49/html5/thumbnails/62.jpg)
Summary (continued)
• Inorder traversal− Traverse left, visit node, traverse right
• Preorder traversal− Visit node, traverse left, traverse right
• Postorder traversal− Traverse left, traverse right, visit node
C++ Programming: Program Design Including Data Structures, Fourth Edition 62