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实现简单字典树的方法
Apr 29 Python
Python学习之用pygal画世界地图实例
Dec 07 Python
python中判断文件编码的chardet(实例讲解)
Dec 21 Python
python微元法计算函数曲线长度的方法
Nov 08 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
Jan 03 Python
pandas取出重复数据的方法
Jul 04 Python
Python脚本操作Excel实现批量替换功能
Nov 20 Python
简单了解python元组tuple相关原理
Dec 02 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
Dec 18 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
Feb 26 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
Apr 17 Python
Python创建简单的神经网络实例讲解
Jan 04 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
《魔兽争霸3:重制版》更新 多项视觉效果调整
2020/05/04 魔兽争霸
探讨php define()函数及defined()函数使用详解
2013/06/09 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
accesskey 提交
2006/06/26 Javascript
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
动态读取JSON解析键值对的方法
2014/06/03 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
基于JavaScript FileReader上传图片显示本地链接
2016/05/27 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
javaScript 逻辑运算符使用技巧整理
2017/05/03 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
浅谈mint-ui 填坑之路
2017/11/06 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
Python兔子毒药问题实例分析
2015/03/05 Python
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
2019/01/15 Python
Django Celery异步任务队列的实现
2019/07/24 Python
python带参数打包exe及调用方式
2019/12/21 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
女儿十岁生日答谢词
2014/01/27 职场文书
自愿离婚协议书范文2014
2014/10/12 职场文书
慰问信格式
2015/02/14 职场文书
项目战略合作意向书
2015/05/08 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS