cse 143 lecture 18 binary trees read 17.1 - 17.2 slides created by marty stepp

20
CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp http://www.cs.washington.edu/143/

Upload: baldric-strickland

Post on 02-Jan-2016

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

CSE 143Lecture 18

Binary Trees

read 17.1 - 17.2

slides created by Marty Stepphttp://www.cs.washington.edu/143/

Page 2: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

2

Question

• Say you want to write a collection optimized for these tasks:– storing/accessing elements in sorted order– adding/removing elements in order– searching the collection for a given element

• What implementation would work well?

– An array?– A sorted array?

– A linked list?

index

0 1 2 3

value

7 11

24

49

front 7 11 24 49

Page 3: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

3

Runtime

• How long does it take to do the following:– add N elements?– search for an element N times in a list of size N?– (add an element, then search for an element) N times?

operation

unsorted array

sorted array

linked list

add

remove

search

access all in order

Page 4: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

4

Creative use of arrays/links

• Some data structures (such as hash tables and binary trees) are built around clever ways of using arrays and/or linked lists.

– What array order can help us find values quickly later?

– What if our linked list nodes each had more than one link?

index

0 1 2 3 4 5 6 7 8 9

value

0 11

0 0 24

0 0 7 0 49

front back24 49117

Page 5: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

5

Trees

• tree: A directed, acyclic structure of linked nodes.– directed : Has one-way links between nodes.– acyclic : No path wraps back around to the same node twice.

– binary tree: Each node has at most two children.

• A tree can be defined as either:– empty (null), or– a root node that contains:

•data, •a left subtree, and•a right subtree.

– (The left and/or rightsubtree could be empty.) 76

32

1

54

root

Page 6: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

6

Trees in computer science

• folders/files on a computer

• family genealogy; organizational charts• AI: decision trees• compilers: parse tree

– a = (b + c) * d;

• cell phone T9

d+

*a

=

cb

Page 7: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

7

Programming with trees

• Trees are a mixture of linked lists and recursion– considered very elegant (perhaps beautiful!) by CSE

nerds– difficult for novices to master

• Common student comment #1:– "My code does not work, and I don't know why."

• Common student comment #2:– "My code works, and I don't know why."

Page 8: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

8

Terminology

• node: an object containing a data value and left/right children

• root: topmost node of a tree• leaf: a node that has no children• branch: any internal node; neither the root nor a leaf

• parent: a node that refers to this one• child: a node that this node refers to• sibling: a node with a common

76

32

1

54

root

Page 9: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

9

Terminology 2

• subtree: the tree of nodes reachable to the left/right from the current node

• height: length of the longest path from the root to any node

• level: the length of thepath from a root to a given node

• full tree: onewhere every branchhas 2 children 76

32

1

54

rootheight = 3

level 1

level 2

level 3

Page 10: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

10

A tree node for integers• A basic tree node object stores data and references to left/right

• Multiple nodes can be linked together into a larger tree

– Would it be useful to have a ternary tree?

left data

right

42

left data

right

42

left data

right

59

left data

right

27

left data

right

86

Page 11: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

11

IntTreeNode class// An IntTreeNode object is one node in a binary tree of ints.public class IntTreeNode { public int data; // data stored at this node public IntTreeNode left; // reference to left subtree public IntTreeNode right; // reference to right subtree // Constructs a leaf node with the given data. public IntTreeNode(int data) { this(data, null, null); } // Constructs a branch node with the given data and links. public IntTreeNode(int data, IntTreeNode left, IntTreeNode right) { this.data = data; this.left = left; this.right = right; }}

Page 12: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

12

IntTree class// An IntTree object represents an entire binary tree of ints.public class IntTree { private IntTreeNode overallRoot; // null for an empty tree methods}

– Client code talks to the IntTree,not to the node objects inside it

– Methods of the IntTree createand manipulate the nodes,their data and links between them 76

32

1

54

overallRoot

Page 13: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

13

IntTree constructor

• Assume we have the following constructors:

public IntTree(IntTreeNode overallRoot)public IntTree(int height)

– The 2nd constructor will create a tree and fill it with nodes with random data values from 1-100 until it is full at the given height.

IntTree tree = new IntTree(3);

4081

941

17

629

overallRoot

Page 14: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

14

Exercise

• Add a method print to the IntTree class that prints the elements of the tree, separated by spaces.– A node's left subtree should be printed before it, and its

right subtree should be printed after it.

– Example: tree.print();

29 41 6 17 81 9 40

4081

941

17

629

overallRoot

Page 15: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

15

Exercise solution// An IntTree object represents an entire binary tree of ints.public class IntTree { private IntTreeNode overallRoot; // null for an empty tree ... public void print() { print(overallRoot); System.out.println(); // end the line of output }

private void print(IntTreeNode root) { // (base case is implicitly to do nothing on null) if (root != null) { // recursive case: print left, center, right print(overallRoot.left); System.out.print(overallRoot.data + " "); print(overallRoot.right); } }}

Page 16: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

16

Template for tree methods

public class IntTree { private IntTreeNode overallRoot; ...

public type name(parameters) { name(overallRoot, parameters); }

private type name(IntTreeNode root, parameters) { ... }}

• Tree methods are often implemented recursively– with a public/private pair– the private version accepts the root node to process

Page 17: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

17

Traversals

• traversal: An examination of the elements of a tree.– A pattern used in many tree algorithms and methods

• Common orderings for traversals:– pre-order: process root node, then its left/right

subtrees– in-order: process left subtree, then root node, then

right– post-order: process left/right subtrees, then root

node

4081

941

17

629

overallRoot

Page 18: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

18

Traversal example

• pre-order: 17 41 29 6 81 40• in-order: 29 41 6 17 81 9 40• post-order: 29 6 41 81 40 9 17

4081

941

17

629

overallRoot

Page 19: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

19

Traversal trick

• To quickly generate a traversal:– Trace a path around the tree.– As you pass a node on the

proper side, process it.•pre-order: left side•in-order: bottom•post-order: right side

• pre-order: 17 41 29 6 81 40• in-order: 29 41 6 17 81 9 40• post-order: 29 6 41 81 40 9 17

4081

941

17

629

overallRoot

Page 20: CSE 143 Lecture 18 Binary Trees read 17.1 - 17.2 slides created by Marty Stepp

20

• Give pre-, in-, and post-order traversals for the following tree:

– pre: 42 15 27 48 9 86 12 5 3 39– in: 15 48 27 42 86 5 12 9 3 39– post: 48 27 15 5 12 86 39 3 42

Exercise

386

915

42

27

48

overallRoot

12 39

5