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'>
'''

  运行结果:

<每日一题>题目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. lds 文件说明

    主要符号说明 OUTPUT_FORMAT(bfdname) 指定输出可执行文件格式. OUTPUT_ARCH(bfdname) 指定输出可执行文件所运行 CPU 平台 ENTRY(symbol) 指定 ...

  2. error LNK2019: 无法解析的外部符号 __imp_recv,该符号在函数 evthread_notify_drain_default 中被引用

    在Windows系统中使用libevent时,编译报错:error LNK2019: 无法解析的外部符号 __imp_recv,该符号在函数 evthread_notify_drain_default ...

  3. RAKsmart新出香港服务器的优势

    RAKsmart为了更好地服务用户,所以最近RAKsmart新推出得香港服务器又带给了用户更多的选择,那这次RAKsmart新推出香港服务器有哪些优势呢? 1.带宽更大可升至10Mpbs 香港服务器的 ...

  4. android 休眠状态下 后台数据上传

    下面来说一下黑屏情况下传递数据: 要实现程序退出之后,仍然可以传递数据,请求网络,必须采用service,service可以保持在后台一直运行,除非系统资源极其匮乏,否则一般来说service是不会被 ...

  5. ci用户登录

    [list] 预先加载数据库操作类和Session类 即在autoload.php中,$autoload['libraries'] = array('database', 'session'); a. ...

  6. re.groups取出来的空元祖??

    源自学习笔记: day23_1_re_ groups方法取出来的字符是空的元组??为啥? ''' # ------------------------------------------------- ...

  7. 如何解决:修改.gitignore后,不生效

    1.git rm -r --cached . 删除缓存 2.git add .   添加要提交的文件 3.git commit -m "update .gitignore" 提交 ...

  8. 一次bug死磕经历之Hbase堆内存小导致regionserver频繁挂掉

    环境如下: Centos6.5 Apache Hadoop2.7.1 Apache Hbase0.98.12 Apache Zookeeper3.4.6 JDK1.7 Ant1.9.5 Maven3. ...

  9. Linux 实用指令(7)--Linux 磁盘分区、挂载

    目录 Linux 磁盘分区.挂载 1 分区基础知识 1.1 分区的方式: 1.2 windows 下的磁盘分区 2 Linux分区 2.1 原理分析 2.2 磁盘说明 2.3 使用lsblk指令查看当 ...

  10. JS流程控制语句 退出循环break 在while、for、do...while、while循环中使用break语句退出当前循环,直接执行后面的代码。

    退出循环break 在while.for.do...while.while循环中使用break语句退出当前循环,直接执行后面的代码. 格式如下: for(初始条件;判断条件;循环后条件值更新) { i ...