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'> '''
运行结果: