1. class Node(object):
  2. def __init__(self,sName):
  3. self._lChildren = []
  4. self.sName = sName
  5. def __repr__(self):
  6. return "<Node '{}'>".format(self.sName)
  7. def append(self,*args,**kwargs):
  8. self._lChildren.append(*args,**kwargs)
  9. def print_all_1(self):
  10. print(self)
  11. for oChild in self._lChildren:
  12. oChild.print_all_1()
  13. def print_all_2(self):
  14. def gen(o):
  15. lAll = [o,]
  16. while lAll:
  17. oNext = lAll.pop(0)
  18. lAll.extend(oNext._lChildren)
  19. yield oNext
  20. for oNode in gen(self):
  21. print(oNode)
  22.  
  23. oRoot = Node("root")
  24. oChild1 = Node("child1")
  25. oChild2 = Node("child2")
  26. oChild3 = Node("child3")
  27. oChild4 = Node("child4")
  28. oChild5 = Node("child5")
  29. oChild6 = Node("child6")
  30. oChild7 = Node("child7")
  31. oChild8 = Node("child8")
  32. oChild9 = Node("child9")
  33. oChild10 = Node("child10")
  34.  
  35. oRoot.append(oChild1)
  36. oRoot.append(oChild2)
  37. oRoot.append(oChild3)
  38. oChild1.append(oChild4)
  39. oChild1.append(oChild5)
  40. oChild2.append(oChild6)
  41. oChild4.append(oChild7)
  42. oChild3.append(oChild8)
  43. oChild3.append(oChild9)
  44. oChild6.append(oChild10)
  45. # 说明下面代码的输出结果
  46. '''
  47. 就是print_all_1会以深度优先(depth-first)的方式遍历树(tree),而print_all_2则是宽度优先(width-first)
  48. '''
  49. oRoot.print_all_1()
  50. '''
  51. print()函数的调用顺序__str__ > __repe__ > object
  52. 先调用__repe__:<Node 'root'>
  53. oRoot._lChildren:[oChild1]
  54. oRoot.append(oChild1) <Node 'oChild1'>
  55. oChild1.append(oChild4) <Node 'child4'>
  56. oChild4.append(oChild7) <Node 'child7'>
  57. oChild1.append(oChild5) <Node 'child5'>
  58. oRoot.append(oChild2) <Node 'child2'>
  59. oChild2.append(oChild6) <Node 'child6'>
  60. oChild6.append(oChild10) <Node 'child10'>
  61. oRoot.append(oChild3) <Node 'child3'>
  62. oChild3.append(oChild8) <Node 'child8'>
  63. oChild3.append(oChild9) <Node 'child9'>
  64.  
  65. '''
  66. print("--------------")
  67. oRoot.print_all_2()
  68. '''
  69. 先调用__repe__:<Node 'root'>
  70. oRoot._lChildren:
  71. oRoot.append(oChild1) <Node 'child1'>
  72. oRoot.append(oChild2) <Node 'child2'>
  73. oRoot.append(oChild3) <Node 'child3'>
  74. oChild1._lChildren:
  75. oChild1.append(oChild4) <Node 'child4'>
  76. oChild1.append(oChild5) <Node 'child5'>
  77. oChild2._lChildren:
  78. oChild2.append(oChild6) <Node 'child6'>
  79. oChild3._lChildren:
  80. oChild3.append(oChild8) <Node 'child8'>
  81. oChild3.append(oChild9) <Node 'child9'>
  82. oChild4._lChildren:
  83. oChild4.append(oChild7) <Node 'child7'>
  84. oChild5._lChildren: 无
  85. oChild6._lChildren:
  86. oChild6.append(oChild10) <Node 'child10'>
  87. '''

  运行结果:

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

  1. <每日一题>题目17:super()继承相关的面试题

    class A(object): def go(self): print("go A go!") def stop(self): print("stop A stop!& ...

  2. <每日一题>题目14:拷贝的问题

    ''' 拷贝的问题 引用:无论怎么变都一起变 浅拷贝:只拷贝父对象,不会拷贝父对象中的子对象 深拷贝:完全拷贝,重新划分内存空间 ''' 具体如下图: 题目: #求a.b.c.d的值 import c ...

  3. <每日一题>题目20:简单python练习题(11-20)

    #11.编写程序,输入一个自然数,输出它的二进制.八进制.十六进制表示形式 Num = input("请输入任性自然数:") Num = eval(Num) print(" ...

  4. <每日一题>题目4:for循环套生成器的面试题

    题目: def add(n,i): return n+i def test(): for i in range(4): yield i g = test() for n in [1,10,5]: g ...

  5. <每日一题>题目12:列表解析及zip、dict函数的简单应用

    ''' 分析: 1.列表解析:迭代机制的一种应用 语法: [expression for iter_val in iterable] [expression for iter_val in itera ...

  6. <每日一题>题目28:生成随机的测验试卷(单选题)

    #项目:生成随机的测验试卷文件 import random #资料库 capitals = {'北京市':'京','上海市':'沪','天津市':'津','重庆市':'渝','河北省':'冀','山西 ...

  7. <每日一题>题目5:生成器表达式面试题

    题目: def demo(): for i in range(4): yield i g = demo() g1 = (i for i in g ) g2 = (i for i in g1) prin ...

  8. <每日一题>题目15:mysql创建表及相关约束

    题目: 解答: 第一个表创建: create table class( cid int not null auto_increment primary key, caption char(20) no ...

  9. <每日一题>题目6:二分查找

    #二分查找 ''' 1.end问题 2.44对应的end<start 找不到情况 3.返回值递归的情况 4,611,aim太大的情况 ''' l = [2,3,5,10,15,16,18,22, ...

随机推荐

  1. 再次封装ajax函数,统一入口

    根据API写网页的时候,每个页面都需要ajax请求,每次都写一大堆请求,配置什么的太麻烦,于是打算封装一个ajax函数,统一调用: 开始时是使用return返回ajax,如下: function cr ...

  2. "_CMTimeGetSeconds", referenced from:

    CMTime is defined in the CoreMedia.framework. Add that framework to your project.

  3. css---flex布局--容器

    http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool 容器设置 新版的为display为flex    ...

  4. Unix、Linux、Windows操作系统的区别

    1.操作区别 原文地址: https://blog.csdn.net/qq_41026740/article/details/96018808 linux区分大小写,windows在dos界面命令下不 ...

  5. 配置文件一spring-mvc.xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  6. hdu6607 min25筛+杜教筛+伯努利数求k次方前缀和

    推导过程类似https://www.cnblogs.com/acjiumeng/p/9742073.html 前面部分min25筛,后面部分杜教筛,预处理min25筛需要伯努利数 //#pragma ...

  7. NOIP2016 解题报告

    D1T1 玩具谜题 xjb模拟即可 #include<bits/stdc++.h> #define N (100000+5) using namespace std; inline int ...

  8. cordova开发笔记

    搜狐邮箱APP 使用了cordova框架,遇到了一些列问题,稍微总结记录下 扩展支持appInBrowser,用来以新窗口方式打开外链url 解决跨域问题(cordova默认当前域为localhost ...

  9. 愚人节老板发话了,免费送书 + 免费入驻Java知识星球!!

    愚人节快乐,今天的活动很重磅! 1.免费送5本重量级技术书籍,不骗人,小程序随机抽奖送出哦! 2.免费进星球,哈哈不可能,愚人节快乐!不过今天有重大优惠,见下文! 活动一:免费送出5本重量级书籍 赠书 ...

  10. 论文阅读-(ECCV 2018) Second-order Democratic Aggregation

    本文是Tsung-Yu Lin大神所作(B-CNN一作),主要是探究了一种无序的池化方法\(\gamma\) -democratic aggregators,可以最小化干扰信息或者对二阶特征的内容均等 ...