changeset 114:1acfcaaa5ca3

fixed HashTree.getSubTreeAsList when using breadth first.
author casties
date Tue, 28 May 2013 16:36:37 +0200
parents bba951ea7479
children 014efa0923be
files HashTree.py MPIWGProjects.py
diffstat 2 files changed, 30 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/HashTree.py	Tue May 28 14:08:52 2013 +0200
+++ b/HashTree.py	Tue May 28 16:36:37 2013 +0200
@@ -32,16 +32,19 @@
 
     def getSubtreeAsList(self, depthFirst=True):
         """Return the subtree as flattened list sorted by key."""
+        if depthFirst:
+            return self.getSubtreeAsListDepthFirst()
+        else:
+            return self.getSubtreeAsListBreadthFirst()
+
+
+    def getSubtreeAsListDepthFirst(self):
+        """Return the subtree as flattened list, depth first, sorted by key."""
         if self.children is None:
-            if depthFirst:
-                if self.value is None:
-                    return []
-                else:
-                    return [self.value]
-                
+            if self.value is None:
+                return []
             else:
-                # breadth first - value has already been added
-                return []
+                return [self.value]
             
         else:
             if self.value is None:
@@ -49,25 +52,30 @@
             else:
                 sub = [self.value]
                 
-            if depthFirst:
-                # depth first
-                for k in sorted(self.children.keys()):
-                    sub.extend(self.children.get(k).getSubtreeAsList())
+            for k in sorted(self.children.keys()):
+                sub.extend(self.children.get(k).getSubtreeAsListDepthFirst())
                     
-            else:
-                # breadth first
-                clist = sorted(self.children.values(), key=lambda x:x.key)
-                # add all children
-                sub.extend([c.value for c in clist if c.value is not None])
-                # then their children
-                for c in clist:
-                    sub.extend(c.getSubtreeAsList(depthFirst=True))
+        return sub
+
+
+    def getSubtreeAsListBreadthFirst(self):
+        """Return the subtree as flattened list, breadth first, sorted by key."""
+        q = [self]
+        sub = []
+        while len(q) > 0 and len(q) < 100:
+            node = q.pop(0)
+            if node.value is not None:
+                sub.append(node.value)
                 
+            if node.children is not None:
+                clist = sorted(node.children.values(), key=lambda x:x.key)
+                q.extend(clist)            
+
         return sub
 
 
     def getSubtreeAsText(self):
-        """prints whole tree as text"""
+        """Return whole tree as text. Depth first."""
         if self.children is None:
             return "(%s:%s)"%(self.key, self.value)
         else:
@@ -78,8 +86,6 @@
                 
             return sub + "] "
 
-    
-
 
 class HashTree:
     """Tree using dictionaries"""
--- a/MPIWGProjects.py	Tue May 28 14:08:52 2013 +0200
+++ b/MPIWGProjects.py	Tue May 28 16:36:37 2013 +0200
@@ -1765,7 +1765,7 @@
             return []
 
         pl = node.getSubtreeAsList(depthFirst=depthFirst)
-        # logging.debug("getProjectsAsList: node=(%s,%s) pl=%s"%(node.key,node.value,pl))
+        #logging.debug("getProjectsAsList: node=(%s,%s) pl=%s"%(node.key,node.value,[p.getNumber() for p in pl]))
         # return filtered list
         return [p for p in pl if (p.checkActive(active) and p.checkArchived(archived))]