diff --git a/src/Containers-AVL-Tree-Inspector/CTAVLTree.extension.st b/src/Containers-AVL-Tree-Inspector/CTAVLTree.extension.st index b9635bd..df6a480 100644 --- a/src/Containers-AVL-Tree-Inspector/CTAVLTree.extension.st +++ b/src/Containers-AVL-Tree-Inspector/CTAVLTree.extension.st @@ -2,12 +2,30 @@ Extension { #name : 'CTAVLTree' } { #category : '*Containers-AVL-Tree-Inspector' } CTAVLTree >> inspectorCanvas: aBuilder [ - + + 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 [ + + ^ 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 ] diff --git a/src/Containers-AVL-Tree-Tests/CTAVLTreeTest.class.st b/src/Containers-AVL-Tree-Tests/CTAVLTreeTest.class.st index 5b11674..7aad641 100644 --- a/src/Containers-AVL-Tree-Tests/CTAVLTreeTest.class.st +++ b/src/Containers-AVL-Tree-Tests/CTAVLTreeTest.class.st @@ -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. diff --git a/src/Containers-AVL-Tree/CTAVLTree.class.st b/src/Containers-AVL-Tree/CTAVLTree.class.st index 300c453..8e0ff9d 100644 --- a/src/Containers-AVL-Tree/CTAVLTree.class.st +++ b/src/Containers-AVL-Tree/CTAVLTree.class.st @@ -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' }