1
1
Object subclass: #Node
2
- instanceVariableNames: ' children data'
3
- classVariableNames: ' '
4
- package: ' '
2
+ instanceVariableNames: ' children data'
3
+ classVariableNames: ' '
4
+ package: ' '
5
5
6
6
Node >> children
7
- " Children getter."
8
- ^ children
7
+ " Children getter."
8
+ ^ children
9
9
10
10
Node >> children: newChildren
11
- " Children setter."
12
- children := newChildren.
11
+ " Children setter."
12
+ children := newChildren.
13
13
14
14
Node >> data
15
- " Data getter"
16
- ^ data
15
+ " Data getter"
16
+ ^ data
17
17
18
18
Node >> data: newData
19
- " Data setter"
20
- data := newData.
19
+ " Data setter"
20
+ data := newData.
21
21
22
22
Node >> dfsRecursive
23
- " Recursive depth first search."
24
- data isNil ifFalse: [
25
- Transcript show: data.
26
- Transcript cr.
27
- ].
28
- children collect: [ :each | each dfsRecursive].
23
+ " Recursive depth first search."
24
+ data isNil ifFalse: [
25
+ Transcript show: data.
26
+ Transcript cr.
27
+ ].
28
+ children collect: [ :each | each dfsRecursive].
29
29
30
30
Node >> dfsRecursivePostorder
31
- " Recursive depth first search (post-order)."
32
- children collect: [ :each | each dfsRecursivePostorder ].
33
- data isNil ifTrue: [ ^ self ].
34
- Transcript show: data.
35
- Transcript cr.
31
+ " Recursive depth first search (post-order)."
32
+ children collect: [ :each | each dfsRecursivePostorder ].
33
+ data isNil ifTrue: [ ^ self ].
34
+ Transcript show: data.
35
+ Transcript cr.
36
36
37
37
Node >> dfsInOrderBinaryTree
38
- " Recursive depth first search on a binary tree in order."
39
- children size = 2 ifTrue: [
40
- (children at: 1 ) dfsInOrderBinaryTree.
41
- Transcript show: data.
42
- Transcript cr.
43
- (children at: 2 ) dfsInOrderBinaryTree.
44
- ^ self .
45
- ].
46
- children size = 1 ifTrue: [
47
- (children at: 1 ) dfsInOrderBinaryTree.
48
- Transcript show: data.
49
- Transcript cr.
50
- ^ self .
51
- ].
52
- children size = 0 ifTrue: [
53
- Transcript show: data.
54
- Transcript cr.
55
- ^ self .
56
- ].
57
- Transcript show: ' This is not a binary tree!' .
38
+ " Recursive depth first search on a binary tree in order."
39
+ children size = 2 ifTrue: [
40
+ (children at: 1 ) dfsInOrderBinaryTree.
41
+ Transcript show: data.
42
+ Transcript cr.
43
+ (children at: 2 ) dfsInOrderBinaryTree.
44
+ ^ self .
45
+ ].
46
+ children size = 1 ifTrue: [
47
+ (children at: 1 ) dfsInOrderBinaryTree.
48
+ Transcript show: data.
58
49
Transcript cr.
59
- children length
50
+ ^ self .
51
+ ].
52
+ children size = 0 ifTrue: [
53
+ Transcript show: data.
54
+ Transcript cr.
55
+ ^ self .
56
+ ].
57
+ Transcript show: ' This is not a binary tree!' .
58
+ Transcript cr.
59
+ children length
60
60
61
61
Node >> dfsStack
62
62
" Depth-first search with a stack."
63
63
| stack top |
64
64
stack := Stack new .
65
65
stack push: self .
66
- [stack size > 0 ] whileTrue: [
66
+ [stack size > 0 ] whileTrue: [
67
67
top := stack pop.
68
68
Transcript show: top data.
69
69
Transcript cr.
@@ -73,18 +73,18 @@ Node>>dfsStack
73
73
].
74
74
75
75
Node >> bfs
76
- " A breadth-first tree search using queues."
77
- | queue current |
78
- queue := LinkedList with: self .
79
- [ queue size > 0 ] whileTrue: [
80
- current := queue first.
81
- queue removeFirst.
82
- Transcript show: current.
83
- Transcript cr.
84
- current children collect: [ :child |
85
- queue addLast: child
86
- ].
87
- ]
76
+ " A breadth-first tree search using queues."
77
+ | queue current |
78
+ queue := LinkedList with: self .
79
+ [ queue size > 0 ] whileTrue: [
80
+ current := queue first.
81
+ queue removeFirst.
82
+ Transcript show: current.
83
+ Transcript cr.
84
+ current children collect: [ :child |
85
+ queue addLast: child
86
+ ].
87
+ ]
88
88
89
89
| test |
90
90
test := Node new : 1 children: { Node new : 2 .
0 commit comments