Python二叉树定义与遍历方法实例分析


Posted in Python onMay 25, 2018

本文实例讲述了Python二叉树定义与遍历方法。分享给大家供大家参考,具体如下:

二叉树基本概述:

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

1. 二叉树的每个结点不存在度大于2的结点
2. 二叉树的第i层至多有2^{i-1}个结点
3. 深度为k的二叉树至多有2^k - 1个结点
4. 二叉树中,度为0的结点数N0比度为2的结点数N2大1,即存在N2 + 1 = N0

Python代码:

#coding:utf-8
'BiTree'
class Node(object):
  'Node Defination'
  def __init__(self,item):
    self.item = item
    self.left = None
    self.right = None
class Tree(object):
  'Bitree Defination'
  def __init__(self):
    self.root = None
  def add(self,item):
    node = Node(item)
    if self.root is None:
      self.root = node
    else:
      q = [self.root]
      while True:
        pop_node = q.pop(0)
        if pop_node.left is None:
          pop_node.left = node
          return
        elif pop_node.right is None:
          pop_node.right = node
          return
        else:
          q.append(pop_node.left)
          q.append(pop_node.right)
  def traverse(self):#层次遍历
    if self.root is None:
      return None
    q = [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 res
  def 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_item
  def 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_item
  def 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 + result
if __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程序设计有所帮助。

Python 相关文章推荐
Python接收Gmail新邮件并发送到gtalk的方法
Mar 10 Python
Python简明入门教程
Aug 04 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 Python
Python脚本实现自动将数据库备份到 Dropbox
Feb 06 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
Feb 13 Python
Python从使用线程到使用async/await的深入讲解
Sep 16 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
Oct 27 Python
使用keras实现densenet和Xception的模型融合
May 23 Python
Django创建一个后台的基本步骤记录
Oct 02 Python
python中pop()函数的语法与实例
Dec 01 Python
Python实现微信表情包炸群功能
Jan 28 Python
django注册用邮箱发送验证码的实现
Apr 18 Python
matplotlib 纵坐标轴显示数据值的实例
May 25 #Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
May 25 #Python
Python FTP两个文件夹间的同步实例代码
May 25 #Python
Python单元测试实例详解
May 25 #Python
python 请求服务器的实现代码(http请求和https请求)
May 25 #Python
django将图片上传数据库后在前端显式的方法
May 25 #Python
python3.6.3+opencv3.3.0实现动态人脸捕获
May 25 #Python
You might like
把PHP安装为Apache DSO
2006/10/09 PHP
PHP分页显示制作详细讲解
2006/10/09 PHP
php5.5新数组函数array_column使用
2013/07/08 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
react 父子组件之间通讯props
2018/09/08 Javascript
深入了解js原型模式
2019/05/30 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
微信小程序实现吸顶特效
2020/01/08 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
深入理解python多进程编程
2016/06/12 Python
python 画三维图像 曲面图和散点图的示例
2018/12/29 Python
python爬虫刷访问量 2019 7月
2019/08/01 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
乌克兰机票、铁路和巴士票、酒店搜索、保险:Tickets.ua
2020/01/11 全球购物
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
文字自荐书范文
2014/02/10 职场文书
实验教师岗位职责
2014/02/13 职场文书
《我不是最弱小的》教学反思
2014/02/23 职场文书
班训口号大全
2014/06/18 职场文书
三八妇女节主持词
2015/07/04 职场文书
Python中json.dumps()函数的使用解析
2021/05/17 Python
详解JVM系列之内存模型
2021/06/10 Javascript
HTML+JS实现在线朗读器
2022/02/15 Javascript