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的Tornado框架实现一个简单的WebQQ机器人
Apr 24 Python
Python中用PIL库批量给图片加上序号的教程
May 06 Python
在Django的模型中执行原始SQL查询的方法
Jul 21 Python
Python自动扫雷实现方法
Jul 25 Python
深入探究Django中的Session与Cookie
Jul 30 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
Apr 03 Python
Python实现直播推流效果
Nov 26 Python
Python基础类继承重写实现原理解析
Apr 03 Python
Python接口测试数据库封装实现原理
May 09 Python
通过Python扫描代码关键字并进行预警的实现方法
May 24 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
Python面向对象之成员相关知识总结
Jun 24 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中的正规表达式(二)
2006/10/09 PHP
通过PHP CLI实现简单的数据库实时监控调度
2009/07/01 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
2013/06/03 PHP
PHP表单验证内容是否为空的实现代码
2016/11/14 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
使用Jquery实现点击文字后变成文本框且可修改
2013/09/21 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
Python selenium如何设置等待时间
2016/09/15 Python
在VS Code上搭建Python开发环境的方法
2018/04/06 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
python图片合成的示例
2020/11/09 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
Nike台湾官方商店:Nike.com (TW)
2017/08/16 全球购物
统计员岗位职责
2013/11/14 职场文书
教你打造完美的创业计划书
2014/01/06 职场文书
《胖乎乎的小手》教学反思
2014/02/26 职场文书
材料员岗位职责
2014/03/13 职场文书
会计电算化专业自荐信
2014/03/15 职场文书
工商企业管理专业自荐信范文
2014/04/12 职场文书
公共艺术专业自荐信
2014/09/01 职场文书
浪漫婚礼主题活动策划方案
2014/09/15 职场文书
2015年中秋节主持词
2015/07/30 职场文书
python实现图片批量压缩
2021/04/24 Python
mysql中整数数据类型tinyint详解
2021/12/06 MySQL
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技