Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 24 additions & 6 deletions src/Containers-AVL-Tree-Inspector/CTAVLTree.extension.st
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,30 @@ Extension { #name : 'CTAVLTree' }

{ #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
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
]
2 changes: 1 addition & 1 deletion src/Containers-AVL-Tree-Tests/CTAVLTreeTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ CTAVLTreeTest >> testAddSingleElement [

{ #category : 'tests' }
CTAVLTreeTest >> testAllChildren [

| elements |
elements := (1 to: 10000) collect: [ :i | Random new nextIntegerBetween: 1 and: 100000000 ].
tree addAll: elements.
Expand Down
24 changes: 13 additions & 11 deletions src/Containers-AVL-Tree/CTAVLTree.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,19 @@ CTAVLTree >> addAll: aCollection [

{ #category : 'accessing' }
CTAVLTree >> allChildren [

| currentNode nodesToVisit children |
children := Set new.
nodesToVisit := LinkedList with: root.

[ nodesToVisit isNotEmpty ] whileTrue: [
currentNode := nodesToVisit removeFirst.
children add: currentNode.
nodesToVisit addAll: (currentNode children reject: #isNilNode) ].

^ children
| 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 : 'enumerating' }
Expand Down
Loading