<每日一题>题目18:对象组合和对象构造面试题(深度优先和广度优先的问题)

class Node(object):
    def __init__(self,sName):
        self._lChildren = []
        self.sName = sName
    def __repr__(self):
        return "<Node '{}'>".format(self.sName)
    def append(self,*args,**kwargs):
        self._lChildren.append(*args,**kwargs)
    def print_all_1(self):
        print(self)
        for oChild in self._lChildren:
            oChild.print_all_1()
    def print_all_2(self):
        def gen(o):
            lAll = [o,]
            while lAll:
                oNext = lAll.pop(0)
                lAll.extend(oNext._lChildren)
                yield oNext
        for oNode in gen(self):
            print(oNode)

oRoot = Node("root")
oChild1 = Node("child1")
oChild2 = Node("child2")
oChild3 = Node("child3")
oChild4 = Node("child4")
oChild5 = Node("child5")
oChild6 = Node("child6")
oChild7 = Node("child7")
oChild8 = Node("child8")
oChild9 = Node("child9")
oChild10 = Node("child10")

oRoot.append(oChild1)
oRoot.append(oChild2)
oRoot.append(oChild3)
oChild1.append(oChild4)
oChild1.append(oChild5)
oChild2.append(oChild6)
oChild4.append(oChild7)
oChild3.append(oChild8)
oChild3.append(oChild9)
oChild6.append(oChild10)
# 说明下面代码的输出结果
'''
就是print_all_1会以深度优先(depth-first)的方式遍历树(tree),而print_all_2则是宽度优先(width-first)
'''
oRoot.print_all_1()
'''
print()函数的调用顺序__str__ > __repe__ > object
先调用__repe__:<Node 'root'>
oRoot._lChildren:[oChild1]
    oRoot.append(oChild1)  <Node 'oChild1'> 
        oChild1.append(oChild4) <Node 'child4'>
            oChild4.append(oChild7) <Node 'child7'>
        oChild1.append(oChild5) <Node 'child5'>
    oRoot.append(oChild2)   <Node 'child2'>
        oChild2.append(oChild6) <Node 'child6'>
            oChild6.append(oChild10)    <Node 'child10'>
    oRoot.append(oChild3)   <Node 'child3'>
        oChild3.append(oChild8) <Node 'child8'>
        oChild3.append(oChild9) <Node 'child9'>
        
'''
print("--------------")
oRoot.print_all_2()
'''
先调用__repe__:<Node 'root'>
oRoot._lChildren:
    oRoot.append(oChild1)   <Node 'child1'>
    oRoot.append(oChild2)   <Node 'child2'>
    oRoot.append(oChild3)   <Node 'child3'>
    oChild1._lChildren:
        oChild1.append(oChild4) <Node 'child4'>
        oChild1.append(oChild5) <Node 'child5'>
    oChild2._lChildren:
        oChild2.append(oChild6) <Node 'child6'>
    oChild3._lChildren:    
        oChild3.append(oChild8) <Node 'child8'>
        oChild3.append(oChild9) <Node 'child9'>
    oChild4._lChildren: 
        oChild4.append(oChild7) <Node 'child7'>
    oChild5._lChildren: 无
    oChild6._lChildren:
        oChild6.append(oChild10)    <Node 'child10'>
'''

  运行结果:

猜你喜欢

转载自www.cnblogs.com/shuimohei/p/10367750.html