Presentation is loading. Please wait.

Presentation is loading. Please wait.

More on Trees CS1316: Representing Structure and Behavior.

Similar presentations


Presentation on theme: "More on Trees CS1316: Representing Structure and Behavior."— Presentation transcript:

1 More on Trees CS1316: Representing Structure and Behavior

2 Story Tree data structure as a list of lists Visualizing trees Traversing trees Pre-order and post-order

3 Our SoundTree Class Structure abstract CollectableNode Knows next Knows How to do basic list operations, and defines abstract sound operations (can collect() its sound(s)) SoundBranch Knows children Knows How add children, and collect all the sounds from its children and next SoundNode Knows mySound Knows How collect itself and its next The subclasses extend CollectableNode

4 Our SoundTree Class Structure (a little further) abstract CollectableNode Knows next Knows How to do basic list operations, and collect() SoundBranch Knows children Knows How add children, and collect() SoundNode Knows mySound Knows How collect() ScaleBranch Knows a scaling factor Knows How to access scaling factor, and to collect from children then scale the resultant sound

5 Recall for handling sounds Welcome to DrJava. > SoundTreeExample tree = new SoundTreeExample(); tree.setUp(); > tree.play() > tree.playScaled(2.0); > tree.play();

6 What a tree “looks like” (printed, e.g., toString()) > tree SoundTreeExample@92b1a1 > tree.root() SoundBranch (with child: SoundBranch (with child: SoundNode (with sound: Sound number of samples: 28568 and next: SoundNode (with sound: Sound number of samples: 46034 and next: null and next: ScaleBranch (1.0) SoundBranch (with child: SoundNode (with sound: Sound number of samples: 47392 and next: SoundNode (with sound: Sound number of samples: 32126 and next: null and next: SoundBranch (with child: SoundNode (with sound: Sound number of samples: 8452 and next: SoundNode (with sound: Sound number of samples: 28568 and next: null and next: No next))) and next: No next) Obviously, this doesn’t help us much, but the root() does But this textual representation isn’t so clear, is it? Could you modify toString() to fix this?

7 A visual alternative (hierarchical) root: SoundBranch branch1: SoundBranch scaledBranch: ScaleBranch branch2: SoundBranch SoundNode (clap+rest+snap) SoundNode (aah+snap+rest) SoundNode (clink+clave+gong) SoundNode (is+chirp+clap) SoundNode (clap+snap+snap) SoundNode (bassoon+snap+clap)

8 Children of root root: SoundBranch branch1: SoundBranch scaledBranch: ScaleBranch branch2: SoundBranch SoundNode (clap+rest+snap) SoundNode (aah+snap+rest) SoundNode (clink+clave+gong) SoundNode (is+chirp+clap) SoundNode (clap+snap+snap) SoundNode (bassoon+snap+clap) A linked list, with branch1 as top/head of list. If you look at the code, the variable children just points to the first child, which is the head of a linked list.

9 Children of branch1 root: SoundBranch branch1: SoundBranch scaledBranch: ScaleBranch branch2: SoundBranch SoundNode (clap+rest+snap) SoundNode (aah+snap+rest) SoundNode (clink+clave+gong) SoundNode (is+chirp+clap) SoundNode (clap+snap+snap) SoundNode (bassoon+snap+clap) Also a linked list. We are representing a tree as a list of lists.

10 Traversing the tree: tree.root().collect() root: SoundBranch branch1: SoundBranch scaledBranch: ScaleBranch branch2: SoundBranch SoundNode (clap+rest+snap) SoundNode (aah+snap+rest) SoundNode (clink+clave+gong) SoundNode (is+chirp+clap) SoundNode (clap+snap+snap) SoundNode (bassoon+snap+clap) public Sound collect(){ Sound childSound; if (children != null) {childSound = children.collect();} else {childSound = new Sound(1);} SoundBranch code

11 Traversing the tree: tree.root().collect() root: SoundBranch branch1: SoundBranch scaledBranch: ScaleBranch branch2: SoundBranch SoundNode (clap+rest+snap) SoundNode (aah+snap+rest) SoundNode (clink+clave+gong) SoundNode (is+chirp+clap) SoundNode (clap+snap+snap) SoundNode (bassoon+snap+clap) public Sound collect(){ Sound childSound; if (children != null) {childSound = children.collect();} else {childSound = new Sound(1);} SoundBranch code

12 Traversing the tree: tree.root().collect() root: SoundBranch branch1: SoundBranch scaledBranch: ScaleBranch branch2: SoundBranch SoundNode (clap+rest+snap) SoundNode (aah+snap+rest) SoundNode (clink+clave+gong) SoundNode (is+chirp+clap) SoundNode (clap+snap+snap) SoundNode (bassoon+snap+clap) SoundNode code public Sound collect(){ if (this.getNext() == null) {return mySound;} else {return mySound.append(this.getNext().collect());} }

13 Traversing the tree: tree.root().collect() root: SoundBranch branch1: SoundBranch scaledBranch: ScaleBranch branch2: SoundBranch SoundNode (clap+rest+snap) SoundNode (aah+snap+rest) SoundNode (clink+clave+gong) SoundNode (is+chirp+clap) SoundNode (clap+snap+snap) SoundNode (bassoon+snap+clap) SoundNode code public Sound collect(){ if (this.getNext() == null) {return mySound;} else {return mySound.append(this.getNext().collect());} }

14 root: SoundBranch branch1: SoundBranch scaledBranch: ScaleBranch branch2: SoundBranch SoundNode (clap+rest+snap) SoundNode (aah+snap+rest) SoundNode (clink+clave+gong) SoundNode (is+chirp+clap) SoundNode (clap+snap+snap) SoundNode (bassoon+snap+clap)


Download ppt "More on Trees CS1316: Representing Structure and Behavior."

Similar presentations


Ads by Google