二叉树基本概述:

二叉树是有限个元素的几个,如果为空则为空二叉树,或者有一个结点称之为根节点,分列根节点两侧的为二叉树的左右子节点,二叉树有如下的性质:

  1. 二叉树的每个结点不存在度大于2的结点
  2. 二叉树的第i层至多有2^{i-1}个结点
  3. 深度为k的二叉树至多有2^k - 1个结点
  4. 二叉树中,度为0的结点数N0比度为2的结点数N2大1,即存在N2 + 1 = N0
#coding:utf-8
'BiTree'class Node(object):'Node Defination'def __init__(self,item):self.item = itemself.left = Noneself.right = Noneclass Tree(object):'Bitree Defination'def __init__(self):self.root = Nonedef add(self,item):node = Node(item)if self.root is None:self.root = nodeelse:q = [self.root]while True:pop_node = q.pop(0)if pop_node.left is None:pop_node.left = nodereturnelif pop_node.right is None:pop_node.right = nodereturnelse:q.append(pop_node.left)q.append(pop_node.right)def traverse(self):#层次遍历if self.root is None:return  Noneq = [self.root]res = [self.root.item]while q != []:pop_node = q.pop(0)if pop_node.left is not None:q.append(pop_node.left)res.append(pop_node.left.item)if pop_node.right is not None:q.append(pop_node.right)res.append(pop_node.right.item)return  resdef preorder(self,root): #先序遍历if root is None:return []result = [root.item]left_item = self.preorder(root.left)right_item = self.preorder(root.right)return result + left_item + right_itemdef inorder(self,root): #中序遍历if root is None:return []result = [root.item]left_item = self.inorder(root.left)right_item = self.inorder(root.right)return left_item + result  + right_itemdef postorder(self,root): #后序遍历if root is None:return []result = [root.item]left_item = self.postorder(root.left)right_item = self.postorder(root.right)return left_item  + right_item + resultif __name__=='__main__':t = Tree()for i in range(10):t.add(i)print "层序遍历:",t.traverse()print "先序遍历:",t.preorder(t.root)print "中序遍历:",t.inorder(t.root)print "后序遍历:",t.postorder(t.root)
输出结果:
层序遍历: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
先序遍历: [0, 1, 3, 7, 8, 4, 9, 2, 5, 6]
中序遍历: [7, 3, 8, 1, 9, 4, 0, 5, 2, 6]
后序遍历: [7, 8, 3, 9, 4, 1, 5, 6, 2, 0]

这里对于

if __name__=='__main__':
“Make a script both importable and executable”

意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。

这里通过一个示例进行解释:

#test.py
def func():print "we are in %s"%__name__
if __name__ == '__main__':func()
输出结果:
we are in __main__

说明if语句中的内容被执行了,调用了 func()函数,现在在另一个模块中调用func函数

#testtest
from test import func
func()
输出结果:
we are in moudle

也就是说 if 条件中的内容没有执行。

总结:

如果直接执行某个*.py文件,该文件中 if __name__ == '__main__'是True,相当于调式本模块的代码;如果是从另一个模块(testtest.py)通过import导入该文件的时候,这时__name__就是这个模块的名字(test)而不是__main__,总之在调式代码的时候加上 if __name__ == '__main__'中加入调试代码,可以让步模块调用的时候不执行调式代码,如果想排查本模块代码的问题时,直接进行调试执行

Python之二叉树的遍历相关推荐

  1. Python实现二叉树的遍历

    二叉树是有限个元素的集合,该集合或者为空.或者有一个称为根节点(root)的元素及两个互不相交的.分别被称为左子树和右子树的二叉树组成. 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉 ...

  2. 用Python实现二叉树的遍历

    ⼆叉树的遍历 树的遍历是树的⼀种重要的运算.所谓遍历是指对树中所有结点的信息的访问,即依次对树中每个结点访问⼀次且仅访问⼀次,我们把这种对所有节点的访问称为遍历(traversal). 那么树的两种重 ...

  3. python实现二叉树的重建2 之由中序遍历和后序遍历重建

    前言 通过上一节对python实现二叉树的重建1 之由前序遍历和中序遍历重建,我相信我们再来做这个问题就不难了,完全可以照猫画虎的来实现,具体的原理几乎是一样的,直接上代码了 code # 通用解法d ...

  4. 后序遍历的非递归算法python_刷题系列 - Python用非递归实现二叉树后续遍历

    顺便把Python用非递归实现二叉树后续遍历也写了. 其实前序中序和后续都是针对父节点说的.比如下面这个最简单二叉树. 前序就是ABC,父节点A在前 中序就是BAC,父节点A在中间 后序就是BCA,父 ...

  5. python根据二叉树的前序遍历和中序遍结果历重建二叉树

    python根据二叉树的前序遍历和中序遍结果历重建二叉树 前序遍历 对于当前节点,先输出该节点,然后输出他的左孩子,最后输出他的右孩子.以上图为例,递归的过程如下: (1):输出 1,接着左孩子: ( ...

  6. python实现二叉树遍历(前序遍历、中序遍历、后序遍历)

    python实现二叉树遍历(前序遍历.中序遍历.后序遍历) 在计算机科学中,二叉树是一种树数据结构,其中每个节点最多有两个子节点,称为左子节点和右子节点.使用集合理论概念的递归定义是(非空)二叉树是元 ...

  7. 二叉树的遍历—广度优先(BFS)和深度优先(DFS)python实现

    二叉树 二叉树(Binary tree)是树形结构的一个重要类型.对于二叉树的基础知识这里不做过多介绍,下面我们直接介绍二叉树的遍历方式和如何用python代码去实现二叉树的遍历. 二叉树的遍历(重点 ...

  8. 算法(2)-二叉树的遍历(递归/迭代)python实现

    二叉树的遍历 1.深度优先DFS 1.1 DFS 递归解法 1.1.1先序遍历 1.1.2中序遍历 1.1.3后序遍历 1.2 DFS迭代解法 1.2.1先序遍历 1.2.2中序遍历 1.2.3后序遍 ...

  9. python实现二叉树非递归前中后序遍历

    python实现二叉树非递归前中后层序遍历 二叉树是数据结构中重要的一部分,本文简单介绍用python实现二叉树的前中后序遍历,包括递归和非递归思路算法. # -*- 二叉树 begin -*- # ...

最新文章

  1. mysql分库主键_分库主键设计-Mysql
  2. aspcms模板转php,aspcms转换zzzcms,aspcms迁移数据,aspcms替换模板,aspcms模板转换-下载-zzzcms官网-开源免费建站系统...
  3. android cocos 二次启动 崩溃,基于cocos2dx 1.0.1 0.12.0的第二次运行时android...
  4. 类Dota2服务器架构
  5. 2015年ps计算机试题,2015年计算机一级考试《PS》模拟试题及答案(一)(2)
  6. Android 使用三级缓存实现对图片的加载
  7. 吟清明之诗,舒心中之怀(转)
  8. spark的UI界面及调优
  9. 【Vue】webpack的基本使用
  10. 基于简单模型KNN——泰坦尼克号获救分析
  11. 领英销售账号的优点和销售账号(专业版)的基本操作,置顶推荐
  12. C#引用interop.taskscheduler.dll
  13. 深入理解LINUX内核 第三版2.6 笔记
  14. Android 微信支付配置流程
  15. 数通基础-STP原理
  16. 帝国往昔--中国的附属国
  17. VS Code下git的ca-bundle.crt问题
  18. Haskll Lesson:Huffman编码实现文本压缩
  19. RT-Thread OS线程间通信之邮箱
  20. 基于Python+Keras+OpenCV实现实时人脸活体检测 | 文末送书

热门文章

  1. Netty源码 服务端的启动
  2. python 面向对象编程 之 上下文管理协议
  3. 安装python sklearn经验总结
  4. HDU 3501 Calculation 2
  5. 放苹果问题 POJ 1664
  6. happens-before规则和指令重排
  7. 导入新的一个android项目抱错
  8. 海量数据处理 - 10亿个数中找出最大的10000个数(top K)
  9. C++ Primer 5th笔记(chap 18 大型程序工具)未命名的命名空间unnamed namespace
  10. 区块链BaaS云服务(28)TOP Network 之业务链和单向状态通道(Layer-2)