<每日一题>题目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'>
'''
运行结果:


<每日一题>题目18:对象组合和对象构造面试题(深度优先和广度优先的问题)的更多相关文章
- <每日一题>题目17:super()继承相关的面试题
class A(object): def go(self): print("go A go!") def stop(self): print("stop A stop!& ...
- <每日一题>题目14:拷贝的问题
''' 拷贝的问题 引用:无论怎么变都一起变 浅拷贝:只拷贝父对象,不会拷贝父对象中的子对象 深拷贝:完全拷贝,重新划分内存空间 ''' 具体如下图: 题目: #求a.b.c.d的值 import c ...
- <每日一题>题目20:简单python练习题(11-20)
#11.编写程序,输入一个自然数,输出它的二进制.八进制.十六进制表示形式 Num = input("请输入任性自然数:") Num = eval(Num) print(" ...
- <每日一题>题目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 ...
- <每日一题>题目12:列表解析及zip、dict函数的简单应用
''' 分析: 1.列表解析:迭代机制的一种应用 语法: [expression for iter_val in iterable] [expression for iter_val in itera ...
- <每日一题>题目28:生成随机的测验试卷(单选题)
#项目:生成随机的测验试卷文件 import random #资料库 capitals = {'北京市':'京','上海市':'沪','天津市':'津','重庆市':'渝','河北省':'冀','山西 ...
- <每日一题>题目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 ...
- <每日一题>题目15:mysql创建表及相关约束
题目: 解答: 第一个表创建: create table class( cid int not null auto_increment primary key, caption char(20) no ...
- <每日一题>题目6:二分查找
#二分查找 ''' 1.end问题 2.44对应的end<start 找不到情况 3.返回值递归的情况 4,611,aim太大的情况 ''' l = [2,3,5,10,15,16,18,22, ...
随机推荐
- Xcode常见路径
模拟器安装的位置: /Library/Developer/CoreSimulator/Profiles/Runtimes 可以通过Xcode安装 模拟器程序的沙盒 Xcode编译生成的Product ...
- leetcode-17-电话号码的字母组合’
题目描述: 方法一:回溯 class Solution: def letterCombinations(self, digits): """ :type digits: ...
- vsftp 被动模式配置
直接复制粘切过来就能用 这里只讲下配置,安装方法可以直接yum 配置文件修改 anonymous_enable=NO #关闭匿名用户 xferlog_file=/var/log/vsftpd.log ...
- JavaScript - DOM相关
DOM节点分类 ( node ) : 元素节点 ( element node ) 属性节点 ( attribute node ) 文本节点 ( text node) DOM的相关操作 : 1. 查询元 ...
- 数论剩余系——cf1089F
关于模和互质,很好的题目 /* n两个质因子 x,y有 ax+by=n-1 ax+by=n-1 ax+1+by=n y|ax+1 gcd(x,y)=1 ax%y,a取[1,y-1],就会有[1,y-1 ...
- Xcode 5 SVN配置
from:http://stackoverflow.com/questions/19180718/import-a-project-in-svn-from-xcode-5/19410994#19410 ...
- Redis 的 4 大法宝,2018 必学中间件!
Redis是什么? 全称:REmote DIctionary Server Redis是一种key-value形式的NoSQL内存数据库,由ANSI C编写,遵守BSD协议.支持网络.可基于内存亦可持 ...
- oracle 如何在一个数据库创建多个实例
实例:是一个非固定的.基于内存的基本进程与内存结构.当服务器关闭后,实例也就不存在了. 数据库(Database)指的是固定的.基于磁盘的数据文件.控制文件.日志文件.参数文件和归档日志文件等. 一般 ...
- jquery 表单验证插件
其他: <form action=""> First name: <input type="text" name="FirstNam ...
- Foundation框架系列-NSArray
NSArray常用API 数组字符串指定字符拼接 // 将数组中的元素以separator拼接返回字符串 比如@[@"a=1", @"b=2"] 以separa ...