如果Google面试让你用python写一个树的遍历程序

前几天忽然对python很感兴趣,学了几天也感觉它非常的简洁实用。打破了我这么长时间对java C# C 和vb的审美疲劳,让我眼前一亮。“就像读英文一样简单”这句话评价python说的很合理。

我对python的好感很大部分是因为听说google很多程序用python,而且在google app engine里面和支持python。如果你去google面试或者笔试,很可能就会考到这个题:用python实现树的遍历。

自己试着写了一下,不过毕竟是菜鸟,有问题请多多指教。

运行效果如下:

源程序如下:

#!user/bin/python

#树的实体(包括 Id, value, fatherId)

class treeModel:

‘‘‘tree view‘‘‘

def __init__(self,Id,value,fatherId):

self.Id=Id

self.value=value

self.fatherId=fatherId

def show(self):

return self.value

# 树的遍历和展示

class treeShow:

‘‘‘tree show‘‘‘

logList = [treeModel(0,‘addTree‘,0)]  #记录已经遍历过的节点

writtenList = [treeModel(0,‘addTree‘,0)]  #记录已经打印出的节点

def __init__(self,rootId,list):

self.rootId = rootId

self.list=list

#通过Id获取节点

def getModelById(self,Id):

for t in self.list:

if t.Id == Id:

return t

return None

#判断是否有子节点

def haveChild(self,t):

for t1 in self.list:

if t1.fatherId == t.Id and not self.IsInLogList(t1):

return True

return False

#获取第一个没有遍历的子节点

def getFirstChild(self,t):

for t1 in self.list:

if t1.fatherId == t.Id and not self.IsInLogList(t1):

return t1

return None

#判断某节点是否已经被遍历

def IsInLogList(self,t):

for t1 in self.logList:

if t1.Id == t.Id:

return True

return False

#判断某节点是否已经打印

def IsInWrittenList(self,t):

for t1 in self.writtenList:

if t1.Id == t.Id:

return True

return False

#获取父节点

def getFatherTree(self,t):

for t1 in self.list:

if t1.Id == t.fatherId:

return t1

return None

#遍历打印

def show(self):

currentTree = self.getModelById(self.rootId)

s = ‘  ‘

strNum = 1

while(True):

if self.haveChild(currentTree):

if not self.IsInWrittenList(currentTree):

print s*strNum,currentTree.show()

self.writtenList.append(currentTree)

currentTree = self.getFirstChild(currentTree)

strNum += 1

continue

else:

if(currentTree.Id == self.rootId):

break

else:

if not self.IsInWrittenList(currentTree):

print s*strNum,currentTree.show()

self.logList.append(currentTree)

currentTree = self.getFatherTree(currentTree)

strNum -= 1

continue

#初始化一些节点实例

t1 = treeModel(1,‘A-1‘,0)

t2 = treeModel(2,‘B-1‘,1)

t3 = treeModel(3,‘B-2‘,1)

t4 = treeModel(4,‘C-1‘,2)

t5 = treeModel(5,‘C-2‘,2)

t6 = treeModel(6,‘C-3‘,3)

t7 = treeModel(7,‘C-4‘,3)

t8 = treeModel(8,‘D-1‘,4)

t9 = treeModel(9,‘E-1‘,8)

t10 = treeModel(10,‘E-2‘,8)

#将这些节点实例链式存储起来(就像数据库里存储一样)

list = [t1,t2,t3,t4,t5,t6,t7,t8,t9,t10]

#调用展示

ts = treeShow(1,list)

ts.show()

时间: 2024-10-08 10:14:05

如果Google面试让你用python写一个树的遍历程序的相关文章

如何用 Python 写一个简易的抽奖程序

不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下手. 其实这个很正常,刚开始学习写代码,都是跟着别人的套路往下写,看的套路少,很难形成自己的套路,这就和做数学题是一样的,做一道题就想会所有的题目,这个可能性微乎其微,都是通过大量的练习来摸索到自己的套路. 正好快过年了,各个公司都会搞一些抽奖活动,小编今天就来聊一下,如果要写一个简单的抽奖程序,小

Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)

这道题是一道爬虫练习题,需要爬链接http://tieba.baidu.com/p/2166231880里的所有妹子图片,点进链接看一下,这位妹子是日本著名性感女演员--杉本由美,^_^好漂亮啊,赶紧开始爬吧. 以下就是我的爬虫步骤: 一.获取页面 虽然request和beautifulsoup模块方便又好用,但是我还是决定使用传统的urllib和urllib模块,毕竟对这两个模块熟悉之后,就能基本明白爬虫的原理和实现啦. 首先是导入模块,除了前面提到的两个模块,我们还要导入re模块,使用正则表

用 Python 写一个爬图片的程序---------纪念我的第一个爬虫程序

终于到这题了,话不多说.直接上代码. #coding:utf-8 #By :晓明酱 #Date:2016/4/16 #参考:http://blog.csdn.net/xiaowanggedege/article/details/8650034 import urllib,re def get_html(url): page = urllib.urlopen(url) html = page.read() return html def get_img(html): reg = r'src="(.

用 python 写一个年会抽奖小程序

使用 pyinstaller 打包工具常用参数指南 pyinstaller -F demo.py 参数 含义 -F 指定打包后只生成一个exe格式的文件 -D –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项) -c –console, –nowindowed 使用控制台,无界面(默认选项) -w –windowed, –noconsole 使用窗口,无控制台 -p 添加搜索路径,让其找到对应的库. -i 改变生成程序的icon图标 pyinstaller -F -w -

Python写一个网络监控小程序

原理是监控端口的形式,持续进行telnet判断,若端口无法连接说明网络出现异常,则进行打印到本地文件 # -*- coding: utf-8 -* import telnetlib,time,os Path = os.getcwd() file_name = 'ping_log.txt' ping_log_path = os.path.join(Path,file_name) if not os.path.exists(ping_log_path): os.mknod(file_name) wh

用Python写一个ftp下载脚本

用Python写一个ftp下载脚本 ----基于Red Hat Enterprise Linux Server release 6.4 (Santiago):python 2.6.6 Ps:少侠我接触Python半个月以来接到的第一个需求,虽然如此简单的一个脚本,少侠我磕磕绊绊却用了将近一天半的时间才写出来,但还是很开心,毕竟也粗来了,废话不多说,切入正题.因为一开始没有用过ftplib模块,所以各种谷歌度娘一堆资料杂乱不堪,话不清,理不乱的,本文实现的功能简单,下面介绍一下,以免误导读者. 需

老男孩教育每日一题-2017-04-17:使用Shell或Python写一个脚本,CPU使用率超过80%或硬盘超过85%邮件报警

老男孩教育每日一题-2017-04-17: 使用Shell或Python写一个脚本,CPU使用率超过80%或硬盘超过85%邮件报警. 今天是老男孩教育每日一题陪伴大家的第29天.

python写一个脚本解析文件

Python写一个脚本解析文件 ----基于Red Hat Enterprise Linux Server release 6.4 (Santiago):python 2.6.6 需求: 1.去掉空行 2.去掉空行后输出到一个新文件 附加需求(排版):1.'-'缩进n个字符 '-'缩进2n个字符 以此类推 2.'-'开头的所有句子输出在一行 '-'开头的句子输出在一行 以此类推 --------------------------------------------分隔线------------

python写一个通讯录V2.0

python写一个通讯录step by step V2.0 引用知识 list + dict用于临时存储用户数据信息 cPickle用于格式化文件存取 依旧使用file来进行文件的存储 解决问题 1.操刀开始去做 原始代码 实现功能(可做模板) 1.判断输入内容是否在给出的menu目录内,在的话,返回对应结果,不在就报错 2.调用os模块的exit功能 3.字典配合循环加上函数实现switch的功能 #!/usr/bin/env python #coding:utf8 #Author:zhuim