39
1 Binary Trees and Binary Search Trees Based on Dale & Co: Object-Oriented Data Structures using C++ (graphics)

Binary Trees and Binary Search Trees

Embed Size (px)

DESCRIPTION

Binary Trees and Binary Search Trees. Based on Dale & Co: Object-Oriented Data Structures using C++ (graphics). Binary Tree. A binary tree is a structure in which: Each node can have at most two children, and in which a unique path exists from the root to every other node. - PowerPoint PPT Presentation

Citation preview

Page 1: Binary Trees and Binary Search Trees

1

Binary Trees andBinary Search Trees

Based on Dale & Co: Object-Oriented Data Structures using C++ (graphics)

Page 2: Binary Trees and Binary Search Trees

2

A binary tree is a structure in which:

Each node can have at most two children, and in which a unique path exists from the root to every other node.

The two children of a node are called the left child and the right child, if they exist.

Binary Tree

Page 3: Binary Trees and Binary Search Trees

3

A Binary Tree

Q

V

T

K S

A E

L

Page 4: Binary Trees and Binary Search Trees

4

How many leaf nodes?

Q

V

T

K S

A E

L

Page 5: Binary Trees and Binary Search Trees

5

How many descendants of Q?

Q

V

T

K S

A E

L

Page 6: Binary Trees and Binary Search Trees

6

How many ancestors of K?

Q

V

T

K S

A E

L

Page 7: Binary Trees and Binary Search Trees

7

A Binary Tree with Tree Nodes

Q

V

T

K S

A E

L

Page 8: Binary Trees and Binary Search Trees

8

Node Terminology for a Tree Node

Page 9: Binary Trees and Binary Search Trees

9

Binary Trees

You can write a class that represents each node in a binary tree Called BinaryTreeNode

Instance variables of the class BinaryTreeNode info: stores the information part of the node lLink: points to the root node of the left subtree rLink: points to the root node of the right subtree

Page 10: Binary Trees and Binary Search Trees

10

Tree Traversals

Insertion, deletion, and lookup (and other) operations require that the binary tree be traversed

Commonly used traversals Inorder traversal Preorder traversal Postorder traversal

Page 11: Binary Trees and Binary Search Trees

11

Tree Traversals: In Order Print

Page 12: Binary Trees and Binary Search Trees

12

Inorder (tree): LeftNodeRight Binary tree is traversed as follows:

Traverse left subtree Visit node Traverse right subtree

private void inorder(BinaryTreeNode<T> t){ if (t != null) { inorder(t.lLink); System.out.print(t.info + “ “); inorder(t.rLink); }}

To print in alphabetical order

Page 13: Binary Trees and Binary Search Trees

13

Postorder (tree): LeftRightNode Binary tree is traversed as follows:

Traverse left subtree Traverse right subtree Visit node

private void postorder(BinaryTreeNode<T> t){ if (t != null){ postorder(t.lLink); postorder(t.rLink); System.out.print(t.info + “ “); } } Visits leaves first (good for deletion)

Page 14: Binary Trees and Binary Search Trees

14

Preorder (tree): NodeLeftRight Binary tree is traversed as follows:

Visit node Traverse left subtree Traverse right subtree

private void preorder(BinaryTreeNode<T> t){ if (t != null) { System.out.print(t.info + “ “); preorder(t.lLink); preorder(t.rLink); }} Useful with binary trees (not BST)

Page 15: Binary Trees and Binary Search Trees

15

Three Tree Traversals

Page 16: Binary Trees and Binary Search Trees

16

Binary Search Trees (BST)

To search for an item in a normal binary tree, you must traverse entire tree until item is found Search process will be very slow Similar to searching in an arbitrary linked list

Binary search tree Data in each node is

– Larger than the data in its left child– Smaller than the data in its right child

Page 17: Binary Trees and Binary Search Trees

17

A special kind of binary tree in which:

1. Each node contains a distinct data value,

2. The key values in the tree can be compared using “greater than” and “less than”, and

3. The key value of each node in the tree is

less than every key value in its right subtree, and greater than every key value in its left subtree.

So, a Binary Search Tree (BST) is . . .

Page 18: Binary Trees and Binary Search Trees

18

Depends on its key values and their order of insertion.

Insert the elements ‘J’ ‘E’ ‘F’ ‘T’ ‘A’ in that order.

The first value to be inserted is put into the root node.

The shape of a binary search tree . . .

‘J’

Page 19: Binary Trees and Binary Search Trees

19

Thereafter, each value to be inserted begins by comparing itself to the value in the root node, moving left it is less, or moving right if it is greater. This continues at each level until it can be inserted as a new leaf.

Inserting ‘E’ into the BST

‘J’

‘E’

Page 20: Binary Trees and Binary Search Trees

20

Begin by comparing ‘F’ to the value in the root node, moving left it is less, or moving right if it is greater. This continues until it can be inserted as a leaf.

Inserting ‘F’ into the BST

‘J’

‘E’

‘F’

Page 21: Binary Trees and Binary Search Trees

21

Begin by comparing ‘T’ to the value in the root node, moving left it is less, or moving right if it is greater. This continues until it can be inserted as a leaf.

Inserting ‘T’ into the BST

‘J’

‘E’

‘F’

‘T’

Page 22: Binary Trees and Binary Search Trees

22

Begin by comparing ‘A’ to the value in the root node, moving left it is less, or moving right if it is greater. This continues until it can be inserted as a leaf.

Inserting ‘A’ into the BST

‘J’

‘E’

‘F’

‘T’

‘A’

Page 23: Binary Trees and Binary Search Trees

23

is obtained by inserting

the elements ‘A’ ‘E’ ‘F’ ‘J’ ‘T’ in that order?

What binary search tree . . .

‘A’

Page 24: Binary Trees and Binary Search Trees

24

obtained by inserting

the elements ‘A’ ‘E’ ‘F’ ‘J’ ‘T’ in that order.

Binary search tree . . .

‘A’

‘E’

‘F’

‘J’

‘T’

Page 25: Binary Trees and Binary Search Trees

25

Another binary search tree

Add nodes containing these values in this order:

‘D’ ‘B’ ‘L’ ‘Q’ ‘S’ ‘V’ ‘Z’

‘J’

‘E’

‘A’ ‘H’

‘T’

‘M’

‘K’ ‘P’

Page 26: Binary Trees and Binary Search Trees

26

Is ‘F’ in the binary search tree?

‘J’

‘E’

‘A’ ‘H’

‘T’

‘M’

‘K’

‘V’

‘P’ ‘Z’‘D’

‘Q’‘L’‘B’

‘S’

Page 27: Binary Trees and Binary Search Trees

27

Tree RecursionMethod countNodes (pseudocode):

if tree is nullreturn 0

else return countNodes(Left(tree)) +

countNodes(Right(tree)) + 1

Page 28: Binary Trees and Binary Search Trees

28

The Search Operation

Page 29: Binary Trees and Binary Search Trees

29

The Search Operation

public boolean search(T item) { return recSearch(root, item);} //helper: recursive method called by searchpublic boolean recSearch(BinaryTreeNode<T> tree, T item) { if(tree == null) return false; else { Comparable<T> temp = (Comparable<T>) tree.info; if (temp.compareTo(item) == 0) return true; else if (temp.compareTo(item) > 0) return recSearch(tree.lLink, item); else return recSearch(tree.rLink, item); }}

Page 30: Binary Trees and Binary Search Trees

30

The Insert Operation

Important: A new node is always inserted into its appropriate position in the binary search tree as a leaf.

Page 31: Binary Trees and Binary Search Trees

31

Insertions into a Binary Search Tree

Page 32: Binary Trees and Binary Search Trees

32

The Insert Operationpublic void insert(T item) { root = recInsert(root, item);} //helper: recursive method called by insertpublic BinaryTreeNode<T> recInsert(BinaryTreeNode<T> tree, T item) { if(tree == null) { //create new node tree = new BinaryTreeNode<T>(item); } else { Comparable<T> temp = (Comparable<T>) tree.info; if (temp.compareTo(item) == 0) { System.err.print("Already in - no duplicates."); return null; } else if (temp.compareTo(item) > 0) tree.lLink = recInsert(tree.lLink, item); else tree.rLink = recInsert(tree.rLink, item); } return tree;}

Page 33: Binary Trees and Binary Search Trees

33

The Delete Operation

The delete operation has 3 cases Node to be deleted is a leaf Node to be deleted has 1 child (left OR

right) Node to be deleted has 2 children

(nonempty left and right subtrees)

Page 34: Binary Trees and Binary Search Trees

34

Deleting a Leaf Node

Page 35: Binary Trees and Binary Search Trees

35

Deleting a Node with One Child

Page 36: Binary Trees and Binary Search Trees

36

Deleting a Node with Two Children (Q)

Page 37: Binary Trees and Binary Search Trees

37

The Delete Operation

Base Case: If item's key matches Info(tree), delete node

General Case: If item < Info(tree), delete(Left(tree), item);

else

delete(Right(tree), item).

Page 38: Binary Trees and Binary Search Trees

38

Code for Recursive Deletepublic void delete(T item) { root = recDelete(root, item);} //helper: recursive method called by deletepublic BinaryTreeNode<T> recDelete(BinaryTreeNode<T> tree, T item) { if(tree == null){ //empty tree System.err.println("Cannot delete from an empty tree."); return null; } else { Comparable<T> temp = (Comparable<T>) tree.info; if (temp.compareTo(item) > 0) tree.lLink = recDelete(tree.lLink, item); else if(temp.compareTo(item) < 0) tree.rLink = recDelete(tree.rLink, item); else if(tree.lLink != null && tree.rLink != null) {// 2 children tree.info = findMin(tree.rLink).info; //tree.info = findMax(tree.lLink).info; tree.rLink = removeMin(tree.rLink); } else if(root.lLink != null) //1 left child tree = tree.lLink; else if(root.rLink != null) //1 right child tree = tree.rLink; return tree; } }

Page 39: Binary Trees and Binary Search Trees

39

Code for Recursive Delete

//helper: method called by recDelete

protected BinaryTreeNode<T> findMin(BinaryTreeNode<T> tree) {

if(tree != null)

while(tree.lLink != null)

tree = tree.lLink;

return tree;

}

//helper: method called by recDelete

protected BinaryTreeNode<T> removeMin(BinaryTreeNode<T> tree) {

if(tree == null){ //empty tree

System.err.println("Cannot delete from an empty tree.");

return null;

}

else if(tree.lLink != null) {

tree.lLink = removeMin(tree.lLink);

return tree;

}

else

return tree.rLink;

}