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删除nginx缓存文件示例(python文件操作)
Mar 26 Python
让python同时兼容python2和python3的8个技巧分享
Jul 11 Python
python实现将元祖转换成数组的方法
May 04 Python
Python正确重载运算符的方法示例详解
Aug 27 Python
Python实现简单网页图片抓取完整代码实例
Dec 15 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
Aug 01 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
Python数据类型之Tuple元组实例详解
May 08 Python
python常用数据重复项处理方法
Nov 22 Python
Python unittest单元测试框架实现参数化
Apr 29 Python
python 用opencv实现图像修复和图像金字塔
Nov 27 Python
python中filter,map,reduce的作用
Jun 10 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 静态页面中显示动态内容
2009/08/14 PHP
析构函数与php的垃圾回收机制详解
2013/10/28 PHP
php绘图之加载外部图片的方法
2015/01/24 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
javascript中"/"运算符常见错误
2010/10/13 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
JavaScript清空数组元素的两种方法简单比较
2015/07/10 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
Python重新引入被覆盖的自带function
2014/07/16 Python
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
利用Python批量生成任意尺寸的图片
2016/08/29 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
matplotlib实现显示伪彩色图像及色度条
2019/12/07 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
浅析Python 多行匹配模式
2020/07/24 Python
python如何操作mysql
2020/08/17 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
Python 实现集合Set的示例
2020/12/21 Python
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
北京振戎融通Java面试题
2015/09/03 面试题
初一科学教学反思
2014/01/27 职场文书
员工年终考核评语
2014/12/31 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python