CS 10: Problem solving via Object Oriented Programming - - PowerPoint PPT Presentation

cs 10 problem solving via object oriented programming
SMART_READER_LITE
LIVE PREVIEW

CS 10: Problem solving via Object Oriented Programming - - PowerPoint PPT Presentation

CS 10: Problem solving via Object Oriented Programming Winter 2017 Tim Pierson 260 (255) Sudikoff Day 8 Hierarchies Agenda 1. General-purpose


slide-1
SLIDE 1

CS ¡10: ¡ Problem ¡solving ¡via ¡Object ¡Oriented ¡ Programming ¡

Winter ¡2017 ¡

¡

Tim ¡Pierson ¡

260 ¡(255) ¡Sudikoff ¡

Day ¡8 ¡– ¡Hierarchies ¡

slide-2
SLIDE 2

2 ¡

Agenda ¡

  • 1. General-­‑purpose ¡binary ¡trees ¡

¡

  • 2. Tree ¡traversal ¡
  • 3. Expression ¡trees ¡
slide-3
SLIDE 3

3 ¡

We ¡can ¡represent ¡hierarchical ¡data ¡using ¡a ¡ data ¡structure ¡called ¡a ¡tree ¡

Tree ¡data ¡structure ¡

Root ¡node ¡ Parent ¡to ¡two ¡children ¡ Child ¡node ¡of ¡root ¡ Parent ¡node ¡to ¡children ¡below ¡ Interior ¡node ¡ ¡ Leaf ¡(or ¡external) ¡node ¡ Edge ¡ Subtree ¡

Data ¡ Data ¡ Data ¡ Data ¡ Data ¡ Data ¡ Data ¡

slide-4
SLIDE 4

4 ¡

Binary ¡trees ¡nodes ¡have ¡0, ¡1, ¡or ¡2 ¡children ¡

BinaryTree.java ¡

  • Each ¡node ¡has ¡a ¡leZ ¡and ¡right ¡child ¡(those ¡could ¡have ¡children ¡
  • r ¡could ¡be ¡null) ¡and ¡data ¡(generic ¡type ¡E ¡for ¡element) ¡
  • Simple ¡accessors ¡to ¡determine ¡isInner, ¡isLeaf, ¡leZ ¡child, ¡right ¡

child ¡

  • No ¡parent ¡edge, ¡but ¡would ¡be ¡easy ¡to ¡add ¡one ¡
  • Generally ¡will ¡start ¡at ¡root ¡and ¡work ¡downward ¡
  • Different ¡from ¡linked ¡list ¡because ¡list ¡has ¡0 ¡or ¡1 ¡other ¡nodes, ¡

tree ¡has ¡0, ¡1, ¡or ¡2, ¡so ¡can’t ¡just ¡proceed ¡forward ¡in ¡a ¡loop ¡

  • Consequently ¡most ¡tree ¡code ¡is ¡recursive ¡
slide-5
SLIDE 5

5 ¡

To ¡calculate ¡size() ¡from ¡any ¡given ¡node, ¡ must ¡calculate ¡size ¡of ¡children ¡+1 ¡

BinaryTree.java ¡

  • size() ¡ ¡
  • returns ¡number ¡of ¡nodes ¡in ¡a ¡tree, ¡or ¡subtree ¡if ¡not ¡star`ng ¡

at ¡root ¡

  • Size ¡is ¡size ¡of ¡leZ ¡subtree ¡+ ¡size ¡of ¡right ¡substree ¡+ ¡1 ¡(this ¡

node) ¡

  • Makes ¡recursive ¡calls ¡to ¡size() ¡method ¡of ¡children ¡
  • Those ¡children ¡will ¡in ¡turn ¡call ¡their ¡children ¡for ¡size ¡
  • Un`l ¡we ¡hit ¡leaf ¡which ¡has ¡not ¡children, ¡so ¡no ¡more ¡calls ¡to ¡

children’s ¡size() ¡(could ¡have ¡explicitly ¡check ¡for ¡isLeaf() ¡but ¡ don’t ¡have ¡to) ¡

  • At ¡that ¡point ¡num ¡= ¡1, ¡and ¡we ¡recurse ¡back ¡up ¡tree ¡
slide-6
SLIDE 6

6 ¡

Height ¡and ¡equals ¡

BinaryTree.java ¡

  • height() ¡ ¡
  • returns ¡longer ¡of ¡two ¡paths ¡down ¡leZ ¡and ¡right, ¡plus ¡1 ¡
  • Leaf ¡nodes ¡are ¡of ¡height ¡0 ¡
  • equals() ¡
  • Returns ¡true ¡if ¡two ¡trees ¡are ¡equal ¡
  • Must ¡check ¡same ¡number ¡of ¡nodes ¡and ¡each ¡node ¡contains ¡

the ¡same ¡data ¡

  • Why ¡can’t ¡we ¡just ¡use ¡== ¡on ¡each ¡node? ¡(because ¡only ¡== ¡if ¡

point ¡to ¡same ¡memory ¡loca`on, ¡Java ¡doesn’t ¡know ¡how ¡to ¡ compare ¡tree ¡nodes) ¡

slide-7
SLIDE 7

7 ¡

fringe() ¡uses ¡an ¡accumulator ¡to ¡avoid ¡ inefficiencies ¡

BinaryTree.java ¡

  • fringe() ¡ ¡
  • Returns ¡leaves ¡in ¡order, ¡leZ ¡to ¡right ¡
  • Could ¡append ¡fringe ¡of ¡leZ ¡to ¡fringe ¡of ¡right, ¡but ¡ArrayList ¡

append ¡ends ¡up ¡copying ¡one ¡of ¡them, ¡would ¡end ¡up ¡with ¡ quadra`c ¡`me ¡algorithm ¡as ¡stuff ¡gets ¡copied ¡again ¡and ¡again ¡

  • Accumulator ¡pagern ¡saves ¡the ¡day! ¡
  • Pre-­‑create ¡an ¡empty ¡list ¡f ¡(the ¡accumulator) ¡and ¡pass ¡it ¡to ¡

helper ¡func`on ¡addToFringe(f) ¡

  • addToFringe(ArrayList<E> ¡fringe) ¡
  • If ¡leaf ¡node, ¡add ¡data ¡(type ¡is ¡E) ¡to ¡f ¡
  • Else, ¡if ¡hasLe=(), ¡le=.addToFringe(f), ¡if ¡hasRight(), ¡

right.addToFringe(f) ¡

  • f ¡“accumlates” ¡the ¡fringe ¡
slide-8
SLIDE 8

8 ¡

toString() ¡also ¡uses ¡an ¡accumulator ¡to ¡ create ¡a ¡string ¡representa`on ¡of ¡the ¡tree ¡

BinaryTree.java ¡

  • toString() ¡
  • Many ¡ways ¡to ¡print ¡a ¡tree ¡
  • Here ¡we ¡print ¡it ¡in ¡hierarchical ¡structure ¡like ¡a ¡chapter/

sec`on/subsec`on ¡in ¡a ¡book, ¡inden`ng ¡by ¡2 ¡spaces ¡

  • Start ¡with ¡empty ¡string ¡accumulator, ¡then ¡call ¡helper ¡ ¡
  • toStringHelper(String ¡indent) ¡
  • Create ¡a ¡new ¡String ¡res ¡= ¡indent ¡+ ¡data ¡+ ¡new ¡line ¡(holds ¡this ¡

node’s ¡data, ¡now ¡get ¡children) ¡

  • Build ¡children ¡
  • If ¡hasLe=() ¡res ¡+= ¡le=.toStringHelper(indent ¡+ ¡“ ¡ ¡“) ¡
  • If ¡hasRight() ¡res ¡+= ¡right.ToStringHelper(indent ¡+ ¡“ ¡ ¡“) ¡
  • One ¡string ¡is ¡built ¡up, ¡containing ¡new ¡lines ¡
  • Return ¡res ¡
slide-9
SLIDE 9

9 ¡

Agenda ¡

  • 1. General-­‑purpose ¡binary ¡trees ¡

¡

  • 2. Tree ¡traversal ¡
  • 3. Expression ¡trees ¡
slide-10
SLIDE 10

10 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

preorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡leZ.preorder() ¡ ¡ ¡right.preorder() ¡

¡

Examples: ¡ File ¡directory ¡structure ¡ Table ¡of ¡contents ¡in ¡book ¡

slide-11
SLIDE 11

11 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

preorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡leZ.preorder() ¡ ¡ ¡right.preorder() ¡

¡

Examples: ¡ File ¡directory ¡structure ¡ Table ¡of ¡contents ¡in ¡book ¡ Visited ¡ 1 ¡

slide-12
SLIDE 12

12 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

preorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡leZ.preorder() ¡ ¡ ¡right.preorder() ¡

¡

Examples: ¡ File ¡directory ¡structure ¡ Table ¡of ¡contents ¡in ¡book ¡ Visited ¡ 1 ¡

slide-13
SLIDE 13

13 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

preorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡leZ.preorder() ¡ ¡ ¡right.preorder() ¡

¡

Examples: ¡ File ¡directory ¡structure ¡ Table ¡of ¡contents ¡in ¡book ¡ Visited ¡ 1, ¡2 ¡

slide-14
SLIDE 14

14 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

preorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡leZ.preorder() ¡ ¡ ¡right.preorder() ¡

¡

Examples: ¡ File ¡directory ¡structure ¡ Table ¡of ¡contents ¡in ¡book ¡ Visited ¡ 1, ¡2 ¡

slide-15
SLIDE 15

15 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

preorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡leZ.preorder() ¡ ¡ ¡right.preorder() ¡

¡

Examples: ¡ File ¡directory ¡structure ¡ Table ¡of ¡contents ¡in ¡book ¡ Visited ¡ 1, ¡2, ¡4 ¡

slide-16
SLIDE 16

16 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

preorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡leZ.preorder() ¡ ¡ ¡right.preorder() ¡

¡

Examples: ¡ File ¡directory ¡structure ¡ Table ¡of ¡contents ¡in ¡book ¡ Visited ¡ 1, ¡2, ¡4 ¡

slide-17
SLIDE 17

17 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

preorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡leZ.preorder() ¡ ¡ ¡right.preorder() ¡

¡

Examples: ¡ File ¡directory ¡structure ¡ Table ¡of ¡contents ¡in ¡book ¡ Visited ¡ 1, ¡2, ¡4, ¡5 ¡

slide-18
SLIDE 18

18 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

preorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡leZ.preorder() ¡ ¡ ¡right.preorder() ¡

¡

Examples: ¡ File ¡directory ¡structure ¡ Table ¡of ¡contents ¡in ¡book ¡ Visited ¡ 1, ¡2, ¡4, ¡5 ¡

slide-19
SLIDE 19

19 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

preorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡leZ.preorder() ¡ ¡ ¡right.preorder() ¡

¡

Examples: ¡ File ¡directory ¡structure ¡ Table ¡of ¡contents ¡in ¡book ¡ Visited ¡ 1, ¡2, ¡4, ¡5 ¡

slide-20
SLIDE 20

20 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

preorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡leZ.preorder() ¡ ¡ ¡right.preorder() ¡

¡

Examples: ¡ File ¡directory ¡structure ¡ Table ¡of ¡contents ¡in ¡book ¡ Visited ¡ 1, ¡2, ¡4, ¡5, ¡3 ¡

slide-21
SLIDE 21

21 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

preorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡leZ.preorder() ¡ ¡ ¡right.preorder() ¡

¡

Examples: ¡ File ¡directory ¡structure ¡ Table ¡of ¡contents ¡in ¡book ¡ Visited ¡ 1, ¡2, ¡4, ¡5, ¡3, ¡6 ¡

slide-22
SLIDE 22

22 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

preorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡leZ.preorder() ¡ ¡ ¡right.preorder() ¡

¡

Examples: ¡ File ¡directory ¡structure ¡ Table ¡of ¡contents ¡in ¡book ¡ Visited ¡ 1, ¡2, ¡4, ¡5, ¡3, ¡6 ¡

slide-23
SLIDE 23

23 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

preorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡leZ.preorder() ¡ ¡ ¡right.preorder() ¡

¡

Examples: ¡ File ¡directory ¡structure ¡ Table ¡of ¡contents ¡in ¡book ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Visited ¡ 1, ¡2, ¡4, ¡5, ¡3, ¡6, ¡7 ¡

slide-24
SLIDE 24

24 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡

slide-25
SLIDE 25

25 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡

slide-26
SLIDE 26

26 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡

slide-27
SLIDE 27

27 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡

slide-28
SLIDE 28

28 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡ Visited ¡ 4 ¡

slide-29
SLIDE 29

29 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡ Visited ¡ 4 ¡

slide-30
SLIDE 30

30 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡ Visited ¡ 4 ¡

slide-31
SLIDE 31

31 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡ Visited ¡ 4, ¡5 ¡

slide-32
SLIDE 32

32 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡ Visited ¡ 4, ¡5 ¡

slide-33
SLIDE 33

33 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡ Visited ¡ 4, ¡5, ¡2 ¡

slide-34
SLIDE 34

34 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡ Visited ¡ 4, ¡5, ¡2 ¡

slide-35
SLIDE 35

35 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡ Visited ¡ 4, ¡5, ¡2 ¡

slide-36
SLIDE 36

36 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡ Visited ¡ 4, ¡5, ¡2 ¡

slide-37
SLIDE 37

37 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡ Visited ¡ 4, ¡5, ¡2, ¡6 ¡

slide-38
SLIDE 38

38 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡ Visited ¡ 4, ¡5, ¡2, ¡6 ¡

slide-39
SLIDE 39

39 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡ Visited ¡ 4, ¡5, ¡2, ¡6 ¡

slide-40
SLIDE 40

40 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡ Visited ¡ 4, ¡5, ¡2, ¡6, ¡7 ¡

slide-41
SLIDE 41

41 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡ Visited ¡ 4, ¡5, ¡2, ¡6, ¡7, ¡3 ¡

slide-42
SLIDE 42

42 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

postorder() ¡ ¡ ¡leZ.postorder() ¡ ¡ ¡right.postorder() ¡ ¡ ¡do ¡something ¡ ¡

¡

Example: ¡ Compute ¡disk ¡space ¡(not ¡ sure ¡how ¡many ¡bytes ¡in ¡ each ¡directory ¡un`l ¡you ¡ search ¡all ¡children) ¡ Visited ¡ 4, ¡5, ¡2, ¡6, ¡7, ¡3, ¡1 ¡

slide-43
SLIDE 43

43 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

inorder() ¡ ¡ ¡leZ.inorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡right.inorder() ¡

¡

Example: ¡ Drawing ¡a ¡tree ¡

slide-44
SLIDE 44

44 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Example: ¡ Drawing ¡a ¡tree ¡ inorder() ¡ ¡ ¡leZ.inorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡right.inorder() ¡

¡

slide-45
SLIDE 45

45 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Example: ¡ Drawing ¡a ¡tree ¡ inorder() ¡ ¡ ¡leZ.inorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡right.inorder() ¡

¡

slide-46
SLIDE 46

46 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Example: ¡ Drawing ¡a ¡tree ¡ Visited ¡ 4 ¡ inorder() ¡ ¡ ¡leZ.inorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡right.inorder() ¡

¡

slide-47
SLIDE 47

47 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Example: ¡ Drawing ¡a ¡tree ¡ Visited ¡ 4, ¡2 ¡ inorder() ¡ ¡ ¡leZ.inorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡right.inorder() ¡

¡

slide-48
SLIDE 48

48 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Example: ¡ Drawing ¡a ¡tree ¡ Visited ¡ 4, ¡2, ¡5 ¡ inorder() ¡ ¡ ¡leZ.inorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡right.inorder() ¡

¡

slide-49
SLIDE 49

49 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Example: ¡ Drawing ¡a ¡tree ¡ Visited ¡ 4, ¡2, ¡5 ¡ inorder() ¡ ¡ ¡leZ.inorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡right.inorder() ¡

¡

slide-50
SLIDE 50

50 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Example: ¡ Drawing ¡a ¡tree ¡ Visited ¡ 4, ¡2, ¡5, ¡1 ¡ inorder() ¡ ¡ ¡leZ.inorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡right.inorder() ¡

¡

slide-51
SLIDE 51

51 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Example: ¡ Drawing ¡a ¡tree ¡ Visited ¡ 4, ¡2, ¡5, ¡1 ¡ inorder() ¡ ¡ ¡leZ.inorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡right.inorder() ¡

¡

slide-52
SLIDE 52

52 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Example: ¡ Drawing ¡a ¡tree ¡ Visited ¡ 4, ¡2, ¡5, ¡1 ¡ inorder() ¡ ¡ ¡leZ.inorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡right.inorder() ¡

¡

slide-53
SLIDE 53

53 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Example: ¡ Drawing ¡a ¡tree ¡ Visited ¡ 4, ¡2, ¡5, ¡1, ¡6 ¡ inorder() ¡ ¡ ¡leZ.inorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡right.inorder() ¡

¡

slide-54
SLIDE 54

54 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Example: ¡ Drawing ¡a ¡tree ¡ Visited ¡ 4, ¡2, ¡5, ¡1, ¡6, ¡3 ¡ inorder() ¡ ¡ ¡leZ.inorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡right.inorder() ¡

¡

slide-55
SLIDE 55

55 ¡

There ¡are ¡different ¡ways ¡to ¡traverse ¡a ¡tree, ¡ depending ¡on ¡what ¡needs ¡to ¡be ¡done ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Example: ¡ Drawing ¡a ¡tree ¡ Visited ¡ 4, ¡2, ¡5, ¡1, ¡6, ¡3, ¡7 ¡ inorder() ¡ ¡ ¡leZ.inorder() ¡ ¡ ¡do ¡something ¡ ¡ ¡ ¡right.inorder() ¡

¡

slide-56
SLIDE 56

Visited ¡ 4, ¡2, ¡5, ¡1, ¡6, ¡3, ¡7 ¡ Drawing ¡a ¡tree ¡ (leZ ¡to ¡right) ¡

Summary ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Visited ¡ 1, ¡2, ¡4, ¡5, ¡3, ¡6, ¡7 ¡ Book ¡chapters ¡ Preorder ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Visited ¡ 4, ¡5, ¡2, ¡6, ¡7, ¡3, ¡1 ¡ Calculate ¡disk ¡space ¡

1 ¡ 2 ¡ 4 ¡ 5 ¡ 3 ¡ 6 ¡ 7 ¡

Postorder ¡ Inorder ¡

slide-57
SLIDE 57

57 ¡

Agenda ¡

  • 1. General-­‑purpose ¡binary ¡trees ¡

¡

  • 2. Tree ¡traversal ¡
  • 3. Expression ¡trees ¡
slide-58
SLIDE 58

58 ¡

Expression ¡trees ¡ask ¡their ¡children ¡to ¡ evaluate ¡themselves ¡

Expression ¡tree ¡for ¡((3+4) ¡+ ¡(4*2)) ¡* ¡5 ¡

Evaluate ¡ Evaluate ¡ Evaluate ¡ Evaluate ¡

75 ¡

slide-59
SLIDE 59

59 ¡

Expression ¡Tree ¡builds ¡Expression ¡nodes ¡ and ¡evaluates ¡them ¡

Expression.java ¡

  • Interface, ¡specifying ¡that ¡nodes ¡must ¡provide ¡evaluate ¡method ¡

Number.java ¡

  • Implements ¡Expression ¡interface ¡
  • Holds ¡double ¡
  • Returns ¡that ¡value ¡on ¡evaluate() ¡

AddiIon.java ¡

  • Implements ¡Expression ¡interface ¡
  • Holds ¡leZ ¡and ¡right ¡Expression ¡
  • Returns ¡leZ ¡+ ¡right ¡on ¡evaluate() ¡

MulIplicaIon ¡

  • Implements ¡Expression ¡interface ¡
  • Holds ¡leZ ¡and ¡right ¡Expression ¡
  • Returns ¡leZ ¡* ¡right ¡on ¡evaluate() ¡

¡

slide-60
SLIDE 60

60 ¡

Expression ¡Tree ¡builds ¡Expression ¡nodes ¡ and ¡evaluates ¡them ¡

ExpressionTest.java ¡

  • Creates ¡Number ¡and ¡evaluates ¡
  • Creates ¡3 ¡+ ¡4 ¡calling ¡new ¡Addi`on ¡and ¡passing ¡two ¡Numbers ¡
  • Creates ¡test ¡by ¡calling ¡helper ¡func`on ¡below ¡(for ¡readability) ¡
  • c() ¡creates ¡new ¡Number ¡
  • plus ¡(e1,e2) ¡creates ¡new ¡Addi`on ¡
  • Nmes(e1,e2) ¡creates ¡new ¡Mul`plica`on ¡
  • Run ¡

¡