62
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 20: Binary Trees

C++ Programming: Program Design Including Data Structures, Fourth Edition

  • Upload
    aric

  • View
    49

  • Download
    0

Embed Size (px)

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 Presentation

Citation preview

Page 1: C++ Programming: Program Design Including Data Structures,  Fourth Edition

C++ Programming:Program Design Including Data Structures, Fourth Edition

Chapter 20: Binary Trees

Page 2: C++ Programming: Program Design Including Data Structures,  Fourth Edition

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

Binary Trees

C++ Programming: Program Design Including Data Structures, Fourth Edition 3

Page 4: C++ Programming: Program Design Including Data Structures,  Fourth Edition

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
Page 6: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 7: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 8: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 9: C++ Programming: Program Design Including Data Structures,  Fourth Edition

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

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

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

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

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

Copy Tree

C++ Programming: Program Design Including Data Structures, Fourth Edition 14

Page 15: C++ Programming: Program Design Including Data Structures,  Fourth Edition

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

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

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

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
Page 20: C++ Programming: Program Design Including Data Structures,  Fourth Edition

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
Page 22: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 23: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 24: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 25: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 26: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 27: C++ Programming: Program Design Including Data Structures,  Fourth Edition

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

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

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

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
Page 32: C++ Programming: Program Design Including Data Structures,  Fourth Edition

Search

C++ Programming: Program Design Including Data Structures, Fourth Edition 32

Page 33: C++ Programming: Program Design Including Data Structures,  Fourth Edition

Insert

C++ Programming: Program Design Including Data Structures, Fourth Edition 33

Page 34: C++ Programming: Program Design Including Data Structures,  Fourth Edition

Insert (continued)

C++ Programming: Program Design Including Data Structures, Fourth Edition 34

Page 35: C++ Programming: Program Design Including Data Structures,  Fourth Edition

Delete

C++ Programming: Program Design Including Data Structures, Fourth Edition 35

Page 36: C++ Programming: Program Design Including Data Structures,  Fourth Edition

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
Page 38: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 39: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 40: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 41: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 42: C++ Programming: Program Design Including Data Structures,  Fourth Edition

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
Page 44: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 45: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 46: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 47: C++ Programming: Program Design Including Data Structures,  Fourth Edition

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

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

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

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

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

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
Page 54: C++ Programming: Program Design Including Data Structures,  Fourth Edition

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

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

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

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
Page 59: C++ Programming: Program Design Including Data Structures,  Fourth Edition
Page 60: C++ Programming: Program Design Including Data Structures,  Fourth Edition

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

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

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