Binary Search Trees - PowerPoint PPT Presentation

Loading...

PPT – Binary Search Trees PowerPoint presentation | free to download - id: 29bf6-NmFhO



Loading


The Adobe Flash plugin is needed to view this content

Get the plugin now

View by Category
About This Presentation
Title:

Binary Search Trees

Description:

The max height of a tree with N nodes is N (same as a linked list) ... (2) Search the tree level by level, until you find the element you are searching ... – PowerPoint PPT presentation

Number of Views:216
Avg rating:3.0/5.0
Slides: 71
Provided by: Penelope69
Learn more at: http://www.cse.unr.edu
Category:
Tags: binary | search | tree | trees

less

Write a Comment
User Comments (0)
Transcript and Presenter's Notes

Title: Binary Search Trees


1
Binary Search Trees
  • CS 308 Data Structures

2
What is a binary tree?
  • Property1 each node can have up to two successor
    nodes (children)
  • The predecessor node of a node is called its
    parent
  • The "beginning" node is called the root (no
    parent)
  • A node without children is called a leaf

3
Owner Jake
Manager Chef
Brad Carol Waitress
Waiter Cook
Helper Joyce
Chris
Max Len
4
Owner Jake
Manager Chef
Brad Carol Waitress
Waiter Cook
Helper Joyce
Chris
Max Len
5
What is a binary tree? (cont.)
  • Property2 a unique path exists from the root to
    every other node

6
Some terminology
  • Ancestor of a node any node on the path from the
    root to that node
  • Descendant of a node any node on a path from the
    node to the last node in the path
  • Level (depth) of a node number of edges in the
    path from the root to that node
  • Height of a tree number of levels (warning some
    books define it as levels - 1)

7
A Tree Has Levels
Owner Jake
Manager Chef
Brad Carol Waitress
Waiter Cook
Helper Joyce
Chris
Max Len
LEVEL 0
8
Owner Jake
Manager Chef
Brad Carol Waitress
Waiter Cook
Helper Joyce
Chris
Max Len
9
Level Two
Owner Jake
Manager Chef
Brad Carol Waitress
Waiter Cook
Helper Joyce
Chris
Max Len
LEVEL 2
10
A Subtree
Owner Jake
Manager Chef
Brad Carol Waitress
Waiter Cook
Helper Joyce
Chris
Max Len
LEFT SUBTREE OF ROOT NODE
11
Another Subtree
Owner Jake
Manager Chef
Brad Carol Waitress
Waiter Cook
Helper Joyce
Chris
Max Len
RIGHT SUBTREE OF ROOT NODE
12
What is the of nodes N of a full tree with
height h?
The max nodes at level is
l0
l1
lh-1
using the geometric series
13
What is the height h of a full tree with N nodes?
  • The max height of a tree with N nodes is N (same
    as a linked list)
  • The min height of a tree with N nodes is log(N1)

14
(No Transcript)
15
Searching a binary tree
  • (1) Start at the root
  • (2) Search the tree level by level, until you
    find the element you are searching for (O(N)
    time in worst case)
  • Is this better than searching a linked list?

No --- O(N)
16
Binary Search Trees
  • Binary Search Tree Property The value stored at
    a node is greater than the value stored at its
    left child and less than the value stored at its
    right child
  • Thus, the value stored at the root of a subtree
    is greater than any value in its left subtree and
    less than any value in its right subtree!!

17
(No Transcript)
18
Searching a binary search tree
  • (1) Start at the root
  • (2) Compare the value of the item you are
    searching for with the value stored at the root
  • (3) If the values are equal, then item found
    otherwise, if it is a leaf node, then not found

19
Searching a binary search tree (cont.)
  • (4) If it is less than the value stored at the
    root, then search the left subtree
  • (5) If it is greater than the value stored at the
    root, then search the right subtree
  • (6) Repeat steps 2-6 for the root of the subtree
    chosen in the previous step 4 or 5
  • Is this better than searching a linked list?

Yes !! --- O(logN)
20
Tree node structure
template struct
TreeNode ItemType info TreeNode
left TreeNode right
21
Binary Search Tree Specification
  • include
  •  
  • template
  • struct TreeNode
  •  
  • enum OrderType PRE_ORDER, IN_ORDER, POST_ORDER
  •  
  • template
  • class TreeType
  • public
  • TreeType()
  • TreeType()
  • TreeType(const TreeType)
  • void operator(const TreeType)
  • void MakeEmpty()
  • bool IsEmpty() const
  • bool IsFull() const
  • int NumberOfNodes() const

(continues)
22
Binary Search Tree Specification
(cont.)
  • void RetrieveItem(ItemType, bool found)
  • void InsertItem(ItemType)
  • void DeleteItem(ItemType)
  • void ResetTree(OrderType)
  • void GetNextItem(ItemType, OrderType,
    bool)
  • void PrintTree(ofstream) const
  • private
  • TreeNode root
  •  

23
Function NumberOfNodes
  • Recursive implementation
  • nodes in a tree
  • nodes in left subtree nodes in right
    subtree 1
  • What is the size factor?
  • Number of nodes in the tree we are examining
  • What is the base case?
  • The tree is empty
  • What is the general case?
  • CountNodes(Left(tree)) CountNodes(Right(tree))
    1

24
Function NumberOfNodes (cont.)
  • template
  • int TreeTypeNumberOfNodes() const
  • return CountNodes(root)
  •  
  • template
  • int CountNodes(TreeNode tree)
  • if (tree NULL)
  • return 0
  • else
  • return CountNodes(tree-left)
    CountNodes(tree-right) 1

25
  • Lets consider the first few steps

26
Function RetrieveItem
27
Function RetrieveItem
  • What is the size of the problem?
  • Number of nodes in the tree we are examining
  • What is the base case(s)?
  • When the key is found
  • The tree is empty (key was not found)
  • What is the general case?
  • Search in the left or right subtrees

28
Function RetrieveItem (cont.)
  • template
  • void TreeType RetrieveItem(ItemType
    item,bool found)
  • Retrieve(root, item, found)
  •  
  • template
  • void Retrieve(TreeNode tree,ItemType
    item,bool found)
  • if (tree NULL) // base case 2
  • found false
  • else if(item info)
  • Retrieve(tree-left, item, found)
  • else if(item tree-info)
  • Retrieve(tree-right, item, found)
  • else // base case 1
  • item tree-info
  • found true

29
Function InsertItem
  • Use the binary search tree property to insert the
    new item at the correct place

30
Function InsertItem (cont.)
  • Implementing insertion using recursion

Insert 11
31
Function InsertItem (cont.)
  • What is the size of the problem?
  • Number of nodes in the tree we are examining
  • What is the base case(s)?
  • The tree is empty
  • What is the general case?
  • Choose the left or right subtree

32
Function InsertItem (cont.)
  • template
  • void TreeTypeInsertItem(ItemType
    item)
  • Insert(root, item)
  •  
  • template
  • void Insert(TreeNode tree, ItemType
    item)
  • if(tree NULL) // base case
  • tree new TreeNode
  • tree-right NULL
  • tree-left NULL
  • tree-info item
  • else if(item info)
  • Insert(tree-left, item)
  • else
  • Insert(tree-right, item)

33
Function InsertItem (cont.)
Insert 11
34
Does the order of inserting elements into a tree
matter?
  • Yes, certain orders produce very unbalanced
    trees!!
  • Unbalanced trees are not desirable because search
    time increases!!
  • There are advanced tree structures
    (e.g.,"red-black trees") which guarantee balanced
    trees

35
Does the order of inserting elements into a tree
matter? (cont.)
36
Function DeleteItem
  • First, find the item then, delete it
  • Important binary search tree property must be
    preserved!!
  • We need to consider three different cases 
  • (1) Deleting a leaf
  • (2) Deleting a node with only one child
  • (3) Deleting a node with two children

37
(1) Deleting a leaf
38
(2) Deleting a node with only one child
39
(3) Deleting a node with two children
40
(3) Deleting a node with two children (cont.)
  • Find predecessor (it is the rightmost node in the
    left subtree)
  • Replace the data of the node to be deleted with
    predecessor's data
  • Delete predecessor node

41
Function DeleteItem (cont.)
  • What is the size of the problem?
  • Number of nodes in the tree we are examining
  • What is the base case(s)?
  • Key to be deleted was found
  • What is the general case?
  • Choose the left or right subtree

42
Function DeleteItem (cont.)
  • template
  • void TreeTypeDeleteItem(ItemType
    item)
  • Delete(root, item)
  •  
  • template
  • void Delete(TreeNode tree, ItemType
    item)
  • if(item info)
  • Delete(tree-left, item)
  • else if(item tree-info)
  • Delete(tree-right, item)
  • else
  • DeleteNode(tree)

43
Function DeleteItem (cont.)
  • template
  • void DeleteNode(TreeNode tree)
  • ItemType data
  • TreeNode tempPtr
  •  
  • tempPtr tree
  • if(tree-left NULL) //right child
  • tree tree-right
  • delete tempPtr
  • else if(tree-right NULL) // left child
  • tree tree-left
  • delete tempPtr
  • else
  • GetPredecessor(tree-left, data)
  • tree-info data
  • Delete(tree-left, data)

0 or 1 child
0 or 1 child
2 children
44
Function DeleteItem (cont.)
  • template
  • void GetPredecessor(TreeNode tree,
    ItemType data)
  • while(tree-right ! NULL)
  • tree tree-right
  • data tree-info

45
Tree Traversals
  • There are mainly three ways to traverse a tree
  • Inorder Traversal
  • Postorder Traversal
  • Preorder Traversal

46
Inorder Traversal A E H J M T Y
Visit second
tree
T
E
A
H
M
Y
Visit left subtree first
Visit right subtree last
47
Inorder Traversal
  • Visit the nodes in the left subtree, then visit
    the root of the tree, then visit the nodes in the
    right subtree
  • Inorder(tree)
  •  
  • If tree is not NULL
  • Inorder(Left(tree))
  • Visit Info(tree)
  • Inorder(Right(tree))
  • (Warning "visit" means that the algorithm does
    something with the values in the node, e.g.,
    print the value)

48
Postorder Traversal A H E M Y T J
Visit last
tree
T
E
A
H
M
Y
Visit left subtree first
Visit right subtree second
49
Postorder Traversal
  • Visit the nodes in the left subtree first, then
    visit the nodes in the right subtree, then visit
    the root of the tree
  • Postorder(tree)
  • If tree is not NULL
  • Postorder(Left(tree))
  • Postorder(Right(tree))
  • Visit Info(tree)

50
Preorder Traversal J E A H T M Y
Visit first
tree
T
E
A
H
M
Y
Visit left subtree second
Visit right subtree last
51
Preorder Traversal
  • Visit the root of the tree first, then visit the
    nodes in the left subtree, then visit the nodes
    in the right subtree
  • Preorder(tree)
  • If tree is not NULL
  • Visit Info(tree)
  • Preorder(Left(tree))
  • Preorder(Right(tree))

52
Tree Traversals
53
Function PrintTree
  • We use "inorder" to print out the node values
  • Why?? (keys are printed out in ascending order!!)
  • Hint use binary search trees for sorting !!

A D J M Q R T
54
Function PrintTree (cont.)
  • void TreeTypePrintTree(ofstream outFile)
  • Print(root, outFile)
  •  
  • template
  • void Print(TreeNode tree, ofstream
    outFile)
  • if(tree ! NULL)
  • Print(tree-left, outFile)
  • outFile info
  • Print(tree-right, outFile)
  •  
  • (see textbook for overloading )

55
Class Constructor
  • template
  • TreeTypeTreeType()
  • root NULL

56
Class Destructor
How should we delete the nodes of a tree?
57
Class Destructor (contd)
  • Delete the tree in a "bottom-up" fashion
  • Postorder traversal is appropriate for this !!
  • TreeTypeTreeType()
  • Destroy(root)
  •  
  • void Destroy(TreeNode tree)
  • if(tree ! NULL)
  • Destroy(tree-left)
  • Destroy(tree-right)
  • delete tree

58
Copy Constructor
How should we create a copy of a tree?
59
Copy Constructor (contd)
  • template
  • TreeTypeTreeType(const
    TreeType
  • originalTree)
  • CopyTree(root, originalTree.root)
  •  
  • template
  • void CopyTree(TreeNode copy,
    TreeNode originalTree)
  • if(originalTree NULL)
  • copy NULL
  • else
  • copy new TreeNode
  • copy-info originalTree-info
  • CopyTree(copy-left, originalTree-left)
  • CopyTree(copy-right, originalTree-right)

preorder
60
ResetTree and GetNextItem
  • The user is allowed to specify the tree traversal
    order
  • For efficiency, ResetTree stores in a queue the
    results of the specified tree traversal
  • Then, GetNextItem, dequeues the node values from
    the queue

61
ResetTree and GetNextItem (cont.)(specification
file)
  • enum OrderType PRE_ORDER, IN_ORDER, POST_ORDER
  •  
  • template
  • class TreeType
  • public
  • // same as before
  • private
  • TreeNode root
  • QueType preQue
  • QueType inQue
  • QueType postQue

new private data
62
ResetTree and GetNextItem (cont.)
  • template
  • void PreOrder(TreeNode,
    QueType)
  •  
  • template
  • void InOrder(TreeNode,
    QueType)
  •  
  • template
  • void PostOrder(TreeNode,
    QueType)
  •  

63
ResetTree and GetNextItem (cont.)
  • template
  • void PreOrder(TreeNodetree,
    QueType preQue)
  • if(tree ! NULL)
  • preQue.Enqueue(tree-info)
  • PreOrder(tree-left, preQue)
  • PreOrder(tree-right, preQue)
  •  

64
ResetTree and GetNextItem (cont.)
  • template
  • void InOrder(TreeNodetree,
    QueType inQue)
  • if(tree ! NULL)
  • InOrder(tree-left, inQue)
  • inQue.Enqueue(tree-info)
  • InOrder(tree-right, inQue)

65
ResetTree and GetNextItem (cont.)
  • template
  • void PostOrder(TreeNodetree,
    QueType postQue)
  • if(tree ! NULL)
  • PostOrder(tree-left, postQue)
  • PostOrder(tree-right, postQue)
  • postQue.Enqueue(tree-info)

66
The function ResetTree
  • template
  • void TreeTypeResetTree(OrderType
    order)
  • switch(order)
  • case PRE_ORDER PreOrder(root, preQue)
  • break
  • case IN_ORDER InOrder(root, inQue)
  • break
  • case POST_ORDER PostOrder(root, postQue)
  • break

67
The function GetNextItem
  • template
  • void TreeTypeGetNextItem(ItemType
    item, OrderType order, bool finished)
  • finished false
  • switch(order)
  • case PRE_ORDER preQue.Dequeue(item)
  • if(preQue.IsEmpty())
  • finished true
  • break
  •  
  • case IN_ORDER inQue.Dequeue(item)
  • if(inQue.IsEmpty())
  • finished true
  • break
  •  
  • case POST_ORDER postQue.Dequeue(item)
  • if(postQue.IsEmpty())
  • finished true
  • break

68
Iterative Insertion and Deletion
  • See textbook

69
Comparing Binary Search Trees to Linear Lists
70
Exercises
  • 1-3, 8-18, 21, 22, 29-32
About PowerShow.com