Printing BFS (Binary Tree) in Level Order with Specific Formatting

前端 未结 15 1375
情歌与酒
情歌与酒 2020-12-04 13:00

To begin with, this question is not a dup of this one, but builds on it.

Taking the tree in that question as an example,

    1 
   / \\
  2   3
 /            


        
15条回答
  •  粉色の甜心
    2020-12-04 13:23

    My solution is similar to Alex Martelli's, but I separate traversal of the data structure from processing the data structure. I put the meat of the code into iterLayers to keep printByLayer short and sweet.

    from collections import deque
    
    class Node:
        def __init__(self, val, lc=None, rc=None):
            self.val = val
            self.lc = lc
            self.rc = rc
    
        def iterLayers(self):
            q = deque()
            q.append(self)
            def layerIterator(layerSize):
                for i in xrange(layerSize):
                    n = q.popleft()
                    if n.lc: q.append(n.lc)
                    if n.rc: q.append(n.rc)
                    yield n.val
            while (q):
                yield layerIterator(len(q))
    
        def printByLayer(self):
            for layer in self.iterLayers():
                print ' '.join([str(v) for v in layer])
    
    root = Node(1, Node(2, Node(4, Node(7))), Node(3, Node(5), Node(6)))
    root.printByLayer()
    

    which prints the following when run:

    1
    2 3
    4 5 6
    7
    

提交回复
热议问题