<每日一题>题目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, ...
随机推荐
- 再次封装ajax函数,统一入口
根据API写网页的时候,每个页面都需要ajax请求,每次都写一大堆请求,配置什么的太麻烦,于是打算封装一个ajax函数,统一调用: 开始时是使用return返回ajax,如下: function cr ...
- "_CMTimeGetSeconds", referenced from:
CMTime is defined in the CoreMedia.framework. Add that framework to your project.
- css---flex布局--容器
http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool 容器设置 新版的为display为flex ...
- Unix、Linux、Windows操作系统的区别
1.操作区别 原文地址: https://blog.csdn.net/qq_41026740/article/details/96018808 linux区分大小写,windows在dos界面命令下不 ...
- 配置文件一spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- hdu6607 min25筛+杜教筛+伯努利数求k次方前缀和
推导过程类似https://www.cnblogs.com/acjiumeng/p/9742073.html 前面部分min25筛,后面部分杜教筛,预处理min25筛需要伯努利数 //#pragma ...
- NOIP2016 解题报告
D1T1 玩具谜题 xjb模拟即可 #include<bits/stdc++.h> #define N (100000+5) using namespace std; inline int ...
- cordova开发笔记
搜狐邮箱APP 使用了cordova框架,遇到了一些列问题,稍微总结记录下 扩展支持appInBrowser,用来以新窗口方式打开外链url 解决跨域问题(cordova默认当前域为localhost ...
- 愚人节老板发话了,免费送书 + 免费入驻Java知识星球!!
愚人节快乐,今天的活动很重磅! 1.免费送5本重量级技术书籍,不骗人,小程序随机抽奖送出哦! 2.免费进星球,哈哈不可能,愚人节快乐!不过今天有重大优惠,见下文! 活动一:免费送出5本重量级书籍 赠书 ...
- 论文阅读-(ECCV 2018) Second-order Democratic Aggregation
本文是Tsung-Yu Lin大神所作(B-CNN一作),主要是探究了一种无序的池化方法\(\gamma\) -democratic aggregators,可以最小化干扰信息或者对二阶特征的内容均等 ...