forked from pharo-containers/Container-AVL
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCTAVLTree.extension.st
More file actions
48 lines (41 loc) · 1.38 KB
/
CTAVLTree.extension.st
File metadata and controls
48 lines (41 loc) · 1.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Extension { #name : 'CTAVLTree' }
{ #category : '*Containers-AVL-Tree-Inspector' }
CTAVLTree >> allChildren [
| allNodes queue currentNode |
allNodes := OrderedCollection new.
self root isNilNode ifTrue: [ ^ allNodes ].
queue := OrderedCollection with: self root.
[ queue isNotEmpty ] whileTrue: [
currentNode := queue removeFirst.
allNodes add: currentNode.
currentNode left isNilNode ifFalse: [ queue add: currentNode left ].
currentNode right isNilNode ifFalse: [ queue add: currentNode right ]
].
^ allNodes
]
{ #category : '*Containers-AVL-Tree-Inspector' }
CTAVLTree >> inspectorCanvas: aBuilder [
<inspectorPresentationOrder: 90 title: 'AVL'>
self size > 10000 ifTrue: [
^ aBuilder newText
text: 'Tree is too large to render graphically (', self size asString, ' nodes). Please use the Tree tab.';
yourself ].
^ (aBuilder instantiate: SpRoassalInspectorPresenter)
canvas: (CTAVLTreeVisualizer new
tree: self;
build;
canvas);
yourself
]
{ #category : '*Containers-AVL-Tree-Inspector' }
CTAVLTree >> inspectorTree: aBuilder [
<inspectorPresentationOrder: 91 title: 'Tree'>
^ aBuilder newTree
roots: { self root };
children: [ :node |
Array streamContents: [ :s |
node left isNilNode ifFalse: [ s nextPut: node left ].
node right isNilNode ifFalse: [ s nextPut: node right ] ] ];
display: [ :node | node contents asString ];
yourself
]