+ All Categories
Home > Documents > ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462...

ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462...

Date post: 26-Aug-2020
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
91
YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu [email protected]
Transcript
Page 1: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 1

ECE 462Object-Oriented Programming

using C++ and Java

Container Classes

Yung-Hsiang [email protected]

Page 2: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 2

Why Container Classes?

• Many programs require arrays, vectors, lists, queues, stacks, sets ... to store information.

• Both C++ and Java provide container classes that automatically manage memory: allocate additional memory when more elements are added.

• The supported container classes greatly reduce the amount of code needed by programmers and improve productivity.

• Container classes and OOP are closely related: – a container can hold objects of derived classes– polymorphism properly invokes the correct methods

Page 3: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 3

Container Class (For Code Reuse)

• A container needs to be able to hold items of different types (i.e. classes). Examples– list of strings, integers, floating points, student objects– queues of customer objects, car objects– maps: name → address, student ID → name, course

title → classroom• C++ standard template library (STL) and Java container

classes provide such functionality.

Page 4: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 4

Select Container Class

• random or sequential accesses?• allow unique or duplicate items?• O(1) or O(N) for array-like access (using [index])• efficient insert / delete?

– front– end– middle

• Java containers cannot store primitive types (int, char, float ...) and can store objects only. C++ containers can store primitives.

Page 5: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 5

Efficiency

O(1)O(N)O(N)insert/delete in middle

O(1)O(1)+O(1)+insert/delete at end

O(1)O(1)+O(N)insert/delete at front

O(N)O(1)O(1)array-like access

listdequevectoroperation

N: current number of items

Page 6: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 6

Java Containers

Page 7: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 7

Java List

Page 8: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 8

Page 9: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 9

Interface and Class

• A Java interface serves as an abstract class and cannot be instantiated.

• An interface can be implemented by classes.• Typically, an interface is a common base for several

related classes, for example, interface List as the base of ArrayList, LinkedList, Stack, and Vector.

Page 10: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 10

Page 11: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 11

Page 12: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 12

Page 13: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 13

Page 14: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 14

Page 15: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 15

Java Set

Page 16: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 16

Page 17: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 17

Page 18: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 18

no duplicate element in Setelements sorted

Page 19: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 19

Java Map

Page 20: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 20

Map (Hash Table)

• array: integer → element (object)• map: key (object, integer, or string ...) → value (object)• example:

– name → phone number– student ID → department– city name → zip code

• Keys must be unique and do not have to be continuous (unlike array indexes). Values do not have to be unique.

Page 21: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 21

Java MapHistogram of Words

Page 22: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 22

Page 23: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 23

Page 24: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 24

Page 25: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 25

Page 26: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 26

Page 27: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 27

Page 28: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 28

C++ Container(Standard Template Library)

Page 29: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 29

C++ Vector

Page 30: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 30

Page 31: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 31

Page 32: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 32

C++ Vector

contiguous memory • efficient access (array-like [index])• efficient insert / delete at the end (allocate more memory

occasionally)• inefficient insert / delete at the front (allocate memory

for every insertion)• automatic expand / shrink allocated memory (allocate

more than necessary to reduce allocation / release / copy overhead)

• occasional copying of the whole vector

Page 33: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 33

C++ Iterator

pointer to traverse a vector or other STL (standard template library) container

vector<int> v;cout << "\nvector size is: " << v.size() << endl;vector<int>::iterator p = v.begin();while ( p != v.end() ) {

cout << *p << " "; p++;

}

Page 34: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 34

C++ List

Page 35: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 35

Page 36: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 36

Page 37: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 37

Page 38: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 38

Page 39: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 39

C++ Vector of Objects

Page 40: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 40

Page 41: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 41

Page 42: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 42

Page 43: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 43

Page 44: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 44

Page 45: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Container Class 45

Self Test

Page 46: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 1

ECE 462Object-Oriented Programming

using C++ and Java

Collision Detection

Yung-Hsiang [email protected]

Page 47: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 2

Collision Detection

Almost every interactive game requires collision detection: a bullet hits a player, an airplane lands on a runway, a ball hits a brick, and a Tetrix piece hits a wall

Page 48: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 3

Law of Reflection

• N: normal vector• I: incident vector• R: reflection vector• α : angle between N and I• β : angle between N and R

• Law of Reflection

N

IR αβ

α = β

Page 49: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 4

Calculate R

• Suppose N, I, and R are unit vectors, i.e. |N| = |I| = |R| = 1

• R + (- I) = 2 (N ⋅ (- I)) N⇒ The sum of R and (-I) has the

same direction as N⇒ The length is twice the inner

product of N and (-I).

R = 2 (N ⋅ (- I)) N + I = - 2 (N ⋅ I) N + I

N

- IR αβ

Page 50: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 5

Collision between two Circles

N = (x1, y1) - (x2, y2)C1 is moving.

(x1, y1)

(x2, y2)

I

R

Page 51: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 6

Collision between Circle and Square

• approximate by using two squares• if the bounding square of the circle intersects with the

square ⇒ collision• if the intersection is tall ⇒ collide horizontally

(x1, y1)

(x2, y2)

I

RN

Page 52: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 7

Page 53: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 8

Page 54: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 9

Page 55: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 10

Page 56: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 11

Page 57: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 12

Page 58: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 13

Page 59: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 14

Page 60: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 15

Page 61: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 16

Page 62: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 17

Page 63: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 18

Page 64: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 19

Page 65: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 20

Page 66: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 21

Page 67: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 22

Page 68: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 23

Page 69: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 24

Page 70: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 25

Page 71: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 26

Page 72: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 27

Known Problem 1

• When the ball moves towards the gap between two bricks, brick 1 may be eliminated first even though the ball would actually hit brick 2 first.

• This can happen because – brick 1 precedes brick 2 in the brick

list so brick 1 is checked first– the ball moves in discrete steps

(one pixel length each time).• Solution: ignore. This is not easily

noticeable when the ball moves fast.

1 2

Page 73: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 28

Known Problem 2

• Once the ball moves horizontally (or vertically) and there is no circle brick along the ball's movement, the ball's direction will never change.

• Solution: detect whether |vx| or |vy| is too small (for example less than 0.1). If it is too small, make it larger (for example, 0.15).

Page 74: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL Collision Detection 29

Self Test

Page 75: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 1

ECE 462Object-Oriented Programming

using C++ and Java

Create New C++ Containers

Yung-Hsiang [email protected]

Page 76: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 2

Why to Create New Containers?

• need efficient ways to store and access objects• reuse the same implementation for different classes

Page 77: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 3

C++ Binary Search Tree

Page 78: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 4

Binary Search Tree

• A tree contains a group of nodes. • A node can have a left child and a right child. • If a node has no child, the node is a called a leaf node.• Each node has a unique value. • When a new value is inserted to the tree, if the value

already appears, the insertion has no effect.• If the value is smaller than a node, the value is inserted

as the left child of the node. If the node already has a left child, the value is inserted as a child of the child (recursively).

Page 79: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 5

• insert the first value, 17• insert 9• insert 23

• insert 4

1717

917

9 2317

9 23

4

Page 80: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 6

• insert 11

• insert 31

17

9 23

4 11

17

9 23

4 11 31

Page 81: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 7

Traverse Tree (In-Order)

if (left child is not empty){ visit left child; }print value;if (right child is not empty){ visit right child; }

⇒ The output values are sorted.4, 9, 11, 17, 23, 31

17

9 23

4 11 31

Page 82: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 8

Page 83: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 9

Page 84: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 10

Page 85: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 11

Page 86: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 12

Page 87: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 13

Page 88: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 14

Page 89: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 15

Page 90: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 16

Page 91: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.

YHL New Container 17

Self Test


Recommended