classNode(object):"""节点类"""

def __init__(self,elem=-1,lchild=None,rchild=None):

self.elem=elem

self.lchild=lchild

self.rchild=rchildclassTree(object):"""树类"""

def __init__(self):

self.root=None

self.myQueue=[]defadd(self,elem):"""为树添加节点"""node=Node(elem)if self.root == None: #如果树是空的,则对根节点赋值

self.root =node

self.myQueue.append(self.root)else:

treeNode= self.myQueue[0] #此节点的子树还没有对齐

if treeNode.lchild ==None:

treeNode.lchild=node

self.myQueue.append(treeNode.lchild)else:

treeNode.rchild=node

self.myQueue.append(treeNode.rchild)

self.myQueue.pop(0)deffront_digui(self,root):"""利用递归实现树的先序遍历

先序遍历:根-->左-->右"""

if root ==None:return

print(root.elem)

self.front_digui(root.lchild)

self.front_digui(root.rchild)defmiddle_digui(self,root):"""利用递归实现树的中序遍历

中序遍历:左-->根-->右"""

if root ==None:returnself.middle_digui(root.lchild)print(root.elem)

self.middle_digui(root.rchild)deflater_digui(self,root):"""利用递归实现树的后序遍历

后续遍历:左-->右-->根"""

if root ==None:returnself.later_digui(root.lchild)

self.later_digui(root.rchild)print(root.elem)deflevel_queue(self,root):"""利用队列实现树的层次遍历"""

if root ==None:returnmyQueue=[]

node=root

myQueue.append(node)whilemyQueue:

node=myQueue.pop(0)print(node.elem)if node.lchild !=None:

myQueue.append(node.lchild)if node.rchild !=None:

myQueue.append(node.rchild)deftreeDepth(self,root):"""求树的最大深度"""

if root ==None:return0

leftDepth=self.treeDepth(root.lchild)

rightDepth=self.treeDepth(root.rchild)if leftDepth >=rightDepth:return leftDepth+1

else:return rightDepth+1

deftreeWidth(self,root):"""求树的最大宽度"""curwidth= 1maxwidth=0

myQueue=[]

myQueue.append(root)whilemyQueue:

n=curwidthfor i inrange(n):

node=myQueue.pop(0)

curwidth-= 1

if node.lchild !=None:

myQueue.append(node.lchild)

curwidth+= 1

if node.rchild !=None:

myQueue.append(node.rchild)

curwidth+= 1

if curwidth >maxwidth:

maxwidth=curwidthreturnmaxwidthif __name__ == "__main__":

elems= range(14)

tree=Tree()for elem inelems:

tree.add(elem)print("先序遍历")

tree.front_digui(tree.root)print("中序遍历")

tree.middle_digui(tree.root)print("后续遍历")

tree.later_digui(tree.root)print("层次遍历")

tree.level_queue(tree.root)print("树的深度")print(tree.treeDepth(tree.root))print("树的宽度")print(tree.treeWidth(tree.root))

python二叉树最大深度的计算_Python学习笔记24(二叉树遍历、最大深度、最大宽度)...相关推荐

  1. python里while的用法_Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...

  2. python中while的用法_Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...

  3. python编程16章教程_Python学习笔记__16.2章 TCP编程

    # 这是学习廖雪峰老师python教程的学习笔记 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算 ...

  4. python中if语句使用_Python学习笔记之if语句的使用示例

    前言 条件语句在实际开发中我们已经使用过几次了,在这里我们需要再次隆重的来介绍一下它,下面话不多说了,来一起看看详细的介绍吧. if语句 顾名思义,该语句为判断语句,先来一个简单的示例 cars=[' ...

  5. python数值类型的操作_Python学习笔记,数值类型及操作

    数值类型及操作 int类型数值大小不限: 整数的进制 1,整数类型正常为10进制 2,开头加0b or 0B 为二进制 3,加0o or 0O 为8进制 4,加0x 为16进制 浮点运算中存在不确定尾 ...

  6. python中sn的意思_python学习笔记

    学习资料:<简明 Python 教程.pdf>Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程. 特点:1.简单 2.易学 3.开源, ...

  7. python读取文件路径格式_Python学习笔记读写文件之文件与文件路径

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  8. python写完程序保存_Python学习笔记——文件处理

    1.文件路径 1.1 不同系统环境下的路径 1.2 当前工作目录 1.3 绝对路径和相对路径 1.4 新建文件夹-- os.makedirs() 2.文件的读写 2.1 打开文件 2.2 读写文件 3 ...

  9. python的解释提示符为_python学习笔记01--基础

    一.解释型语言 python是一门解释型语言,这意味着: l编写过后的代码不用编译连接即可运行,节约调试时间 lpython的解释器在大多数系统中都有很好实现,所以编写的代码可以运行在任何系统中 但同 ...

最新文章

  1. goland/go语言项目--本地包的导入(将项目添加至GOPATH中)(基于macOS)
  2. angular学习笔记(十三)
  3. 解决Android中无法搜索联系人的问题
  4. bcm943602cs蓝牙用不了_原来手机的蓝牙功能这么强大!除了连接耳机,还有这六大实用功能...
  5. java8-4 多态的练习以及题目
  6. matlab 数值格式转换,Matlab字符串转换及数值格式转换
  7. DIV相对于父DIV底部对齐的实现方法-Div+CSS教程
  8. html z-dext优先级顺序,$ext{1D/1D}$ 动态规划的三种优化
  9. Linux获取文件信息
  10. 入门排序(冒泡、选择、直接)
  11. 图像Radon变换与傅里叶变换(matlab)
  12. 闲鱼双11端侧实践总结
  13. 不用编写程序代码,送你一个爬虫程序批量采集猫眼电影票房数据
  14. Laravel数据快速填充
  15. HDU 6441 Find Integer 【费马大定理】
  16. Elasticsearch许可证过期导致ES用不了的问题
  17. 设计模式之中介者模式---Mediator Pattern
  18. 《深入理解Java虚拟机》第 3 版里面到底多了哪些知识点?本文竟然得到了本书作者的认可!
  19. uniapp使用Vant ui
  20. 服务器和应用系统迁移方案

热门文章

  1. 根据前一个元素的check状态决定其他元素disable
  2. Oracle索引扫描方式
  3. 三国演义人物出场统计代码含义_Python分析《三国演义》人物出场次数,孔明第二,赵云第五...
  4. RabbitMQ-Failed to check/redeclare auto-delete queue(s).
  5. es创建索引库报错 :Types cannot be provided in put mapping requests, unless the include_type_na
  6. IDEA上传本地项目到SVN
  7. linux 查看软连接的源头,linux 软连接怎么查看原始地址
  8. linux非编工作站,高清EDIUS非编网络系统建设 在线非编系统
  9. c语言程序100例第4题 参考了参考答案
  10. 服务器与普通电脑的区别?