100% found this document useful (1 vote)
250 views56 pages

Binary Tree Illustrated

The document discusses binary trees and binary search trees. It defines binary trees as structures where each node has at most two children. It describes tree terminology including nodes, edges, levels, and paths. It also covers tree traversals such as in-order, pre-order and post-order traversals. Binary search trees are defined as binary trees where all left descendants of a node are less than the node's value and all right descendants are greater. The document discusses building, searching and removing nodes from binary search trees in O(log n) time on average.

Uploaded by

Milind Shah
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
100% found this document useful (1 vote)
250 views56 pages

Binary Tree Illustrated

The document discusses binary trees and binary search trees. It defines binary trees as structures where each node has at most two children. It describes tree terminology including nodes, edges, levels, and paths. It also covers tree traversals such as in-order, pre-order and post-order traversals. Binary search trees are defined as binary trees where all left descendants of a node are less than the node's value and all right descendants are greater. The document discusses building, searching and removing nodes from binary search trees in O(log n) time on average.

Uploaded by

Milind Shah
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/ 56

Chapter 10:

Binary Trees

Outline

Tree Structures Tree Node Level and Path Length Binary Tree Definition Binary Tree Nodes Binary Search Trees Locating Data in a Tree Removing a Binary Tree Node stree ADT Application of Binary Search Trees - Removing Duplicates Update Operations Insert & remove an item
2

Associative containers
Sequence containers (eg. array, vector, list)

access items by position, A[i] or V[i] Associative containers (eg. Sets and maps) access items by key (or by value).

Objects are added, removed, or updated by value rather than by position. The underlying data structure for STL associative container is the binary search tree, which allow operations (insert, delete, find) in O(logn) time at worst case.
3

Tree Structures
Arrays, vectors, lists are linear structures, one element follows another. Trees are hierarchical structure.
President -CEO

Product ion Manager Personnel Manager Purchasing Supervisor Warehouse Supervisor

Sales Manager

Shipping Supervisor
4

HIERARC HIC AL TREE STRUC TURE

Tree Structures
+

BINARY EXPRES S ION TREE FOR

"a*b + (c-d) / e "


5

Tree Terminology
Tree is a set of nodes. The set may be empty. If not empty, then there is a distinguished node r, called root, all other nodes originating from it, and zero or more non-empty subtrees T1,T2, ,Tk, each of whose roots are connected by a directed edge from r. (inductive definition)
r

T1

T2

Tk
6

Tree Terminology
A

root

Nodes in subtrees are called successors or descendents of the root node


An immediate successor is called a child
B C D

A leaf node is a node without any children while an interior node has at least one child.

The link between node describes the parentchild relation.


The link between parent and child is called edge A path between a parent P and any node N in its subtrees is a sequence of nodes P= X0,X1, ,Xk=N, where k is the length of the path. Each node Xi in the path is the parent of Xi+1, (0i<k) Size of tree is the number of nodes in the tree

(b)
I J

(a) A GENERAL TREE

Tree Node Level and Path Length


The level of a node N in a tree is the length of the path from root to N. Root is at level 0. The depth of a tree is the length of the longest path from root to any node.

A B E C F D

Level: 0 Level: 1 Level: 2

Level: 3
8

Binary Tree
In a binary tree, no node has more than two children, and the children are distinguished as left and right. A binary tree T is a finite set of nodes with one the following properties: 1. T is a tree if the set of nodes is empty. 2. The set consists of a root R and exactly two distinct binary trees. The left subtree TL and the right subtree TR, either or both subtree may be empty.
9

Examples of Binary Trees


A A B C D E F G D E

Tree A Size 9 Depth 3

Size? depth?

Tree B Size 5 Depth 4


10

Density of a Binary Tree


At any level n, a binary tree may contain from 1 to 2n nodes. The number of nodes per level contributes to the density of the tree. Degenerate tree: there is a single leaf node and each interior node has only one child. An n-node degenerate tree has depth n-1 Equivalent to a linked list A complete binary tree of depth n is a tree in which each level from 0 to n-1 has all possible nodes and all leaf nodes at level n occupy the leftmost positions in the tree.

11

Complete or noncomplete?
A

Complete Tree (Depth 2) Full with all possible nodes

12

Complete or noncomplete?
A

Non-Complete Tree (Depth 3) Level 2 is missing nodes

13

Complete or noncomplete?
A

Non-CompleteTree (Depth 3) occupy Nodes at level 3 do not occurpy leftmost positions


14

Complete or noncomplete?
A

Complete Tree (Depth 3)

15

Evaluating tree density


Max density: how many maximum nodes in a

binary tree of depth d?


Hint: At level k can have at most 2k nodes Proof (by induction on depth)

16

Find depth
Whats the depth of a complete binary tree

with n nodes?

A perfect complete BT with depth d: a CBT with 2d+1-1 nodes The smallest CBT with depth d: (2(d-1)+1-1)+1=2d

17

Implementing of BT
A binary tree node contains a data value,

called nodeValue, and two pointers, left and right. A value of NULL indicates an empty subtree. Declaration of CLASS tnode, d_tnode.h
left A right

A
left B right left C right

C
left D right left E right

left

right

left

right

left

right

H
Abstract Tree Model

Tree Node Model

18

Building a BT
A binary tree consists of a collection of

dynamically allocated tnode objects whose pointer values specify links to their children. Example 1: 4 q
8 p

Example 2:
20 p Build a tree from the bottom up: allocate the children first and then the parent

10 root 30 r
19

40 q

Tree traversals
In a traversal, we visit each node in a tree in

some order.

visit means perform some operation at the node. (eg. print the value, change the value, remove the node) Recursive: pre-order, in-order, post -order Iterative: level-order

Four fundamental traversals


20

Recursive tree traversals


In-order: (LNR)
1.
2. 3.

Traverse the left subtree (go left); Visit the node Traverse the right subtree (go right)

Pre-order: (NLR) post order: (LRN) RNL, NRL, RLN A Example:


B D C

B
E

C F
21

Iterative tree traversals


Level-order:

access elements by levels, with the root coming first (level 0), then the children of the root (level 1), followed by the next generation (level 2), and so forth. usually done as iterative algorithm using a queue A
B D G H E I C F

Example:

22

Count leaves of BT
A node in a tree is a leaf if it has no children.

Scan each node and check for the presence

of children The order of the scan irrelevant Example: using pre-order pattern (n)

23

Depth of BT
The depth of a tree is the length of the longest path from root to any node. 1+ max{depth(TL), depth(TR)} use post-order traversal (n)

24

Copy BT
Make new nodes for the copy

Use post-order traversal: the node is created

after copying the subtrees. (n)

25

Delete tree node & clear BT


Delete a tree node: (Post-order) delete all the

nodes in both subtrees, then delete the node Clear BT: deletes all nodes, then points the root to NULL (delete the root node)

26

Binary Search Trees


A BST is a binary tree
25

in which, at every node, the data value in the left subtree are less than the value at the node and the value in the right subtree are greater. Not allow duplicated value

10 15 30

37 65

Binary Search Tree 1

53
30 50 59 62
27

Binary Search Tree 2

Binary Search Tree 3

Build a BST
The first element entering a BST becomes the root node Subsequence elements entering the tree:

If the value of the new element is less than the value of the current node, proceed to the left subtree of the node

If the left subtree is not empty, repeat the process by comparing item with the root of the subtree If the left subtree is empty, allocate a new node with item as its value, and attach the node to the tree as the left child

If the value of the new element is greater than the value of the current node, proceed to the right subtree of the node

If the right subtree is not empty, repeat the process by comparing item with the root of the subtree If the right subtree is empty, allocate a new node with item as its value, and attach the node to the tree as the right child

If the value of the new element is equal to the value of the current node, perform no action (no duplicate)
28

Examples
Example 1: Start with empty tree, and insert

35,18,25, 48,72, 60 in sequence Example 2: Start with empty tree, and Insert 18,25,48,60,72 Example 3: Start with empty tree, and insert 72,60, 48,35,25,18 Insert a node: O(depth)

Depth, worst case, is O(n) Best (and average) case is O(lgn)

Time complexity to build a BST?


29

Locating data in a BST: O(depth)


Current Node Root = 50 Node = 30 Node = 35 Node = 37 Action Compare item = 37 and 50 37 < 50, move to the left subtree Compare item = 37 and 30 37 > 30, move to the right subtree Compare item = 37 and 35 37 > 35, move to the right subtree Compare item = 37 and 37. Item found.

50 30 25 10 15 32 35 37
30

55 53 60 62

Removing a Binary Search Tree Node


We must maintain the BST property To delete a node r of a BST 1. 2. if r is a leaf, just remove it otherwise, either a. b. replace r with the largest node in its left subtree replace r with the smallest node in its right subtree
37 10 15

25

\\
10 15

//
37 30 65

Delete node 25
30

10 15 30

65

37 65

Bad Solution: 30 is out of place (a)

Good Solution (b)

31

CLASS stree

Constructors

d_stree.h

stree(); Create an empty search tree. stree(T *first, T *last); Create a search tree with the elements from the pointer range [first, last).
CLASS stree Opertions d_stree.h

void displayTree(int maxCharacters); Display the search tree. The maximum number of characters needed to output a node value is maxCharacters. bool empty(); Return true if the tree is empty and false otherwise.
32

CLASS stree

Opertions

d_stree.h

int erase(const T& item); Search the tree and remove item, if it is present; otherwise, take no action. Return the number of elements removed. Postcondition: If item is located in the tree, the size of the tree decreases by 1.
void erase(iterator pos); Erase the item pointed to the iterator pos. Precondition: The tree is not empty and pos points to an item in the tree. If the iterator is invalid, the function throws the referenceError exception. Postcondition: The tree size decreases by 1.
33

CLASS stree

Opertions

d_stree.h

void erase(iterator first, iterator last); Remove all items in the iterator range [first, last). Precondition: The tree is not empty. If empty, the function throws the underflowError exception. Postcondition: The size of the tree decreases by the number of items in the range.
iterator find(const T& item); Search the tree by comparing item with the data values in a path of nodes from the root of the tree. If a match occurs, return an iterator pointing to the matching value in the tree. If item is not in the tree, return the iterator value end().

34

CLASS stree

Opertions

d_stree.h

Pair<iterator, bool> insert(const T& item); If item is not in the tree, insert it and return an iteratorbool pair where the iterator is the location of the new element and the Boolean value is true. If item is already in the tree, return the pair where the iterator locates the existing item and the Boolean value is false. Postcondition: The size of the tree is increased by 1 if item is not present in the tree. int size(); Return the number of elements in the tree.

35

Using Binary Search Trees


Application: Removing Duplicates
7

v
7 3 2 5 3 2 9 3 2

3 5

v
2 3 5 7 9

Use a BST as a filter: 1) Use vector iterator to copy vector elements to BST 2) Clear the vector 3) Use stree iterator to re-fill the vector

Time complexity?
36

Using Binary Search Trees


Application: The Video Store
A video store maintains an inventory of movies that includes multiples titles. When a customer makes an inquiry, the clerk checks the inventory to see whether the title is available. If so, the rental transaction will decreases the number of copies of the title in inventory and increments a similar rented-film entry. When a customer returns a film, the clerk reverses the process by removing a copy from the collection of rented films and adding it to the inventory. --- two stree objects: inventory and rentals.

d_video.h, prg10_5

37

Implementing the Stree class


stnode object: three pointers, one value
left parent nodeValue right

The stree class declaration


public section private section

findNode( ) findNodeRec()

38

Update Operations: insert()


take a new data item, search the tree, add it in the correct

location, and return iterator-bool pair if item is in the tree, return a pair whose iterator component points at the existing item and whose bool component is false. if item is not in the tree, insert it and return a pair whose iterator component points at item and whose bool component is true. And the tree size increases by1 Iteratively traverses the path of the left and right subtress Maintains the current node and parent of the current node Terminates when an empty subtree is found New node replaces the NULL subtree as a child of the parent
39

Example: insert 32: 1nd of 3 steps


1)The function begins at the root node and compares item 32 with the root value 25. Since 32 > 25, we traverse the right subtree and look at node 35.

parent
20

25 35

t
40

12

(a) Step 1: Compare 32 and 25. Traverse the right subtree.

40

insert: 2nd of 3 steps


2)- Considering 35 to be the root of its own subtree, we compare item 32 with 35 and traverse the left subtree of 35.
25 20 35

parent
40

12

(b) Step 2: Compare 32 and 35. Traverse the left subtree.

41

insert: 3nd of 3 steps


3)- Create a leaf node with data value 32. Insert the new node as the left child of node 35. newNode = getSTNode(item,NULL,NULL,parent); parent->left = newNode;
25 20 35

p arent
40

12

32

(c) Step 3: Insert 32 as left child of parent 35

42

Update Operations: erase()


Remove a node, maintain BST property

D = node to be removed P = parent of D R = node that will replace D

43

Case 1: D is a leaf
Update the parent node P to have an empty subtree
Before 40 After 40

30

65

30

65

25

35

50

25

35

50

10

26

33

26

33

29 28

34 28

29

34

Delete leaf node 10. pNodePtr->left is dNode

No replacement is necessary. 44 pNodePtr->left is NULL

Case 2: D has a left child but no right child


Attach the left subtree of D (the tree with root R) to the parent P
B e fore
40

Afte r
40

P
25

30

65

P
25

30

65

D
26 33

35

50

R
26

33

50

10

10

34

29 28

34

29 28

Delete node 35 with only a left child: Node R is the left child.

45

Attach node R to the parent.

Case 3: D has a right child but no left child


Attach the right subtree of D (the tree with root R) to the parent P
Before After

40

40

30

65

30

65

25

35

50

25

35

50

10

26

33

10

29

33

29

34

28

34

28

Delete node 26 with only a right child: Node R is the right child.

Attach node R to the parent.

46

Code implementing of cases 1,2, & 3


// assign pNodePtr the address of P pNodePtr = dNodePtr->parent; // If D has a NULL pointer, the // replacement node is the other child if (dNodePtr->left == NULL || dNodePtr->right == NULL) { if (dNodePtr->right == NULL) rNodePtr = dNodePtr->left; else rNodePtr = dNodePtr->right;

if (rNodePtr != NULL) // D was not a leaf // the parent of R is now the parent of D rNodePtr->parent = pNodePtr;
}
47

Case 4: D has both left and right non-empty subtrees


R = leftmost (smallest) node in DR (right subtree of D)
Delete R from DR Replace D with R

Tree size -48

Example 1 for Case 4: remove 25


Before replacing D by R 40 P pNodePtr 30 65 40 P 30 25 D 35 50 26 10 R 26 33 10 rNodePtr 29 28 34 28 34
49

After replacing D by R

pOfRNodePtr = dNodePtr

65

35

50

29

33

Example 2 for Case 4: remove 30


40 30 65 40 65

25

35

50

25

35

50

10

26

33

10

26

33

29 28

34

29 28

34

Delete node 30 with two children.

Orphaned subtrees.

50

Example 2 for Case 4: remove 30


R = leftmost (smallest) node in DR (right subtree of D)

Delete R from DR
Replace D with R
Before replacing D by R P pNodePtr 40 D rNodePtr pNodePtr R R 33 30 65 33 65 After replacing D by R P 40

rNodePtr

26

35

50

26

35

50

10

29

34

10

29

34

28

28

51

Summary Slide 1

- trees
- hierarchical structures that place elements in nodes along branches that originate from a root. - Nodes in a tree are subdivided into levels in which the topmost level holds the root node.
- Any node in a tree may have multiple successors at the next level. Hence a tree is a non-linear structure.

- Tree terminology with which you should be familiar: parent | child | descendents | leaf node | interior node | subtree.
52

52

Summary Slide 2

- Binary Trees
- Most effective as a storage structure if it has high density
- ie: data are located on relatively short paths from the root. - A complete binary tree has the highest possible density

- an n-node complete binary tree has depth int(log2n). - At the other extreme, a degenerate binary tree is equivalent to a linked list and exhibits O(n) access times.
53

53

Summary Slide 3

- Traversing Through a Tree


- There are six simple recursive algorithms for tree traversal. - The most commonly used ones are: 1) inorder (LNR) 2) postorder (LRN) 3) preorder (NLR). - Another technique is to move left to right from level to level.
- This algorithm is iterative, and its implementation involves using a queue.
54

54

Summary Slide 4

- A binary search tree stores data by


value instead of position
- It is an example of an associative container.
- The simple rules
== return < go left > go right

until finding a NULL subtree make it easy to build a binary search tree that does not allow duplicate values.

55

55

Summary Slide 5

- The insertion algorithm can be used to define the


path to locate a data value in the tree.

- The removal of an item from a binary search tree is


more difficult and involves finding a replacement node among the remaining values.

56

56

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