@@ -19,83 +19,78 @@ Node>>data: newData
19
19
" Data setter"
20
20
data := newData.
21
21
22
- Node >> dfsRecursive
22
+ Node >> dfsRecursive: value
23
23
" Recursive depth first search."
24
- data isNil ifFalse: [
25
- Transcript show: data.
26
- Transcript cr.
24
+ data = value ifTrue: [
25
+ ^ true .
27
26
].
28
- children collect: [ :each | each dfsRecursive].
27
+ children collect: [ :child |
28
+ (child dfsRecursive: value) ifTrue: [ ^ true . ]
29
+ ]
30
+ ^ false .
29
31
30
- Node >> dfsRecursivePostorder
32
+ Node >> dfsRecursivePostOrder: value
31
33
" 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
-
37
- Node >> dfsInOrderBinaryTree
34
+ children collect: [ :child |
35
+ (child dfsRecursive: value) ifTrue: [ ^ true . ]
36
+ ] .
37
+ ^ (data = value) .
38
+
39
+ Node >> dfsInOrderBinaryTree: value
38
40
" 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.
41
+ children size > 2 ifTrue: [
42
+ Transcript show: ' This is not a binary tree!' ; cr.
44
43
^ self .
45
44
].
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!' .
58
- Transcript cr.
59
- children length
45
+ children size = 2 ifTrue: [
46
+ (children at: 1 ) dfsInOrderBinaryTree: value.
47
+ ]
48
+ data = value ifTrue: [
49
+ Transcript show: data; cr.
50
+ ]
51
+ children size >= 1 ifTrue: [
52
+ (children at: 0 ) dfsInOrderBinaryTree: value.
53
+ ]
54
+ ^ self .
60
55
61
- Node >> dfsStack
56
+ Node >> dfsStack: value
62
57
" Depth-first search with a stack."
63
58
| stack top |
64
59
stack := Stack new .
65
60
stack push: self .
66
61
[stack size > 0 ] whileTrue: [
67
62
top := stack pop.
68
- Transcript show: top data.
69
- Transcript cr.
63
+ top data = value ifTrue: [
64
+ ^ true .
65
+ ].
70
66
top children reverseDo: [ :child |
71
- stack push: child
67
+ stack push: child.
72
68
].
73
69
].
70
+ ^ false
74
71
75
- Node >> bfs
72
+ Node >> bfs: value
76
73
" A breadth-first tree search using queues."
77
74
| queue current |
78
75
queue := LinkedList with: self .
79
76
[ queue size > 0 ] whileTrue: [
80
77
current := queue first.
81
78
queue removeFirst.
82
- Transcript show: current.
83
- Transcript cr.
79
+ current data = value ifTrue: [
80
+ ^ true .
81
+ ]
84
82
current children collect: [ :child |
85
83
queue addLast: child
86
84
].
87
- ]
85
+ ].
86
+ ^ false
88
87
89
88
| test |
90
89
test := Node new : 1 children: { Node new : 2 .
91
90
Node new : 3 children: { Node new : 4 .
92
91
Node new : 5 . } }.
93
- test dfsRecursive.
94
- Transcript cr.
95
- test dfsRecursivePostorder.
96
- Transcript cr.
97
- test dfsInOrderBinaryTree.
98
- Transcript cr.
99
- test dfsStack.
100
- Transcript cr.
101
- test bfs.
92
+ Transcript show: (test dfsRecursive: 6 ); cr.
93
+ Transcript show: (test dfsRecursivePostorder: 4 ); cr.
94
+ test dfsInOrderBinaryTree: 7 .
95
+ Transcript show: (test dfsStack: 2 ); cr.
96
+ Transcript show: (test bfs: 4 ); cr.
0 commit comments