二叉树设计

定义节点类

class Node:

# 修改初始化方法

def init(self,value):

self.value = value # 节点值

self.left = None # 左子树

self.right = None # 右子树

定二叉树类

class BinaryTree:

# 修改初始化方法

def init(self,root=None):

self.root = root # 根节点

# 定义添加节点方法 广度优先

def add(self,value):

if self.root == None:

self.root = Node(value)

return # 根节点已存在,不再添加

# 根节点不为空,开始遍历

queue= []

# 将根节点加入队列

queue.append(self.root)

# 循环判断,哪个节点为空,将新节点加入该节点

while True:

# 从队列中取出根节点

node = queue.pop(0)

# 判断该节点左子树是否为空

if node.left == None:

node.left = Node(value)

return

else:

queue.append(node.left)

# 判断该节点右子树是否为空

if node.right == None:

node.right = Node(value)

return

else:

queue.append(node.right)

# 遍历二叉树 广度优先

def traverse(self,root):

# 判断根节点是否为空,若为空,则返回

if self.root == None:

return

# 创建队列

queue = []

# 将根节点添加到队列中

queue.append(self.root)

# 循环遍历,根据队列长度来循环,需要大于0

while len(queue) > 0:

# 从队列中取出节点

node = queue.pop(0)

# 打印节点内容

print(node.value,end=' ')

# 判断左子树是否为空,若不为空,则添加到队列中

if node.left != None:

queue.append(node.left)

# 判断右子树是否为空,若不为空,则添加队列中

if node.right != None:

queue.append(node.right)

# 遍历二叉树,深度优先,先序遍历 (根左右)

def pre_traverse(self,root):

# 判断根节点是否为空,不为空则执行

if root is not None:

# 打印根节点

print(root.value,end=' ')

# 递归调用左子树

self.pre_traverse(root.left)

# 递归调用右子树

self.pre_traverse(root.right)

# 遍历二叉树,深度优先,中序遍历 (左根右)

def mid_traverse(self,root):

# 判断根节点是否为空,不为空则执行

if root is not None:

# 递归调用左子树

self.mid_traverse(root.left)

# 打印根节点

print(root.value,end=' ')

# 递归调用右子树

self.mid_traverse(root.right)

# 遍历二叉树,深度优先,后序遍历 (左右根)

def post_traverse(self,root):

# 判断根节点是否为空,不为空则执行

if root is not None:

# 递归调用左子树

self.post_traverse(root.left)

# 递归调用右子树

self.post_traverse(root.right)

# 打印根节点

print(root.value,end=' ')

测试

def Dm01():

# 创建二叉树

tree = BinaryTree()

# 添加节点

tree.add(0)

tree.add(1)

tree.add(2)

tree.add(3)

tree.add(4)

tree.add(5)

tree.add(6)

tree.add(7)

tree.add(8)

tree.add(9)

# 先序遍历

print("\n先序遍历:")

tree.pre_traverse(tree.root)

# 中序遍历

print("\n中序遍历:")

tree.mid_traverse(tree.root)

# 后序遍历

print("\n后序遍历:")

tree.post_traverse(tree.root)

运行测试

if name == 'main':

Dm01()1.

在python中实现二叉树的更多相关文章

  1. python实战--数据结构二叉树

    此文将讲述如何用python实战解决二叉树实验 前面已经讲述了python语言的基本用法,现在让我们实战一下具体明确python的用法 点击我进入python速成笔记 先看一下最终效果图: 首先我们要 ...

  2. Python中的高级数据结构详解

    这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint这些数据结构的用法,需要的朋友可以参考 ...

  3. Python中的高级数据结构(转)

    add by zhj: Python中的高级数据结构 数据结构 数据结构的概念很好理解,就是用来将数据组织在一起的结构.换句话说,数据结构是用来存储一系列关联数据的东西.在Python中有四种内建的数 ...

  4. XGBoost中参数调整的完整指南(包含Python中的代码)

    (搬运)XGBoost中参数调整的完整指南(包含Python中的代码) AARSHAY JAIN, 2016年3月1日     介绍 如果事情不适合预测建模,请使用XGboost.XGBoost算法已 ...

  5. python数据结构之二叉树的统计与转换实例

    python数据结构之二叉树的统计与转换实例 这篇文章主要介绍了python数据结构之二叉树的统计与转换实例,例如统计二叉树的叶子.分支节点,以及二叉树的左右两树互换等,需要的朋友可以参考下 一.获取 ...

  6. [转]Python中的str与unicode处理方法

    早上被python的编码搞得抓耳挠腮,在搜资料的时候感觉这篇博文很不错,所以收藏在此. python2.x中处理中文,是一件头疼的事情.网上写这方面的文章,测次不齐,而且都会有点错误,所以在这里打算自 ...

  7. python中的Ellipsis

    ...在python中居然是个常量 print(...) # Ellipsis 看别人怎么装逼 https://www.keakon.net/2014/12/05/Python%E8%A3%85%E9 ...

  8. python中的默认参数

    https://eastlakeside.gitbooks.io/interpy-zh/content/Mutation/ 看下面的代码 def add_to(num, target=[]): tar ...

  9. Python中的类、对象、继承

    类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ...

  10. python中的TypeError错误解决办法

    新手在学习python时候,会遇到很多的坑,下面来具体说说其中一个. 在使用python编写面向对象的程序时,新手可能遇到TypeError: this constructor takes no ar ...

随机推荐

  1. PHP项目&变量覆盖&反序列化&未授权访问&身份验证

    CNVD拿1day-验证&未授权-xhcms&Bosscms 此种漏洞由于没有什么关键函数,所以需要通过功能点去进行测试. Bosscms未授权访问 CNVD官网上搜索Bosscms未 ...

  2. 牛客周赛34(A~E)

    A 两种情况 两个字符相同只有2 两个字符不相同4 #include <bits/stdc++.h> #define int long long #define rep(i,a,b) fo ...

  3. 磁盘 U盘找不到

    及磁盘找不到了, 第一步: 看排线是否插好,稳当 第二步:在磁盘管理下面,磁盘是否还在,如果磁盘显示在,只是没有磁盘符 第三步:diskpart ,进入磁盘  其他的命令自己 查询 第四步:进入 CM ...

  4. 如何避免MYSQL主从延迟带来的读写问题?

    在MYSQL 部署架构选型上,许多公司都会用到主从读写分离的架构,如下是一个一主一从的架构,主库master负责写入,从库slave进行读取. 但是既然是读写分离,必然会面临这样一个问题,当在主库上进 ...

  5. 安装VMware——Unable to install all modules.See log /tmp/vmware-han/vmware-6098.log for detalls.(Exit code 1)的解决方法(模块加载失败)

    这是编译失败的原因在VM社区有这样一种解决方案,亲测有效,帮助我自己解决的麻烦,所有在这分享,希望能够帮助到小伙伴:不要被接下来的代码吓倒因为这是github上项目,所以要先在ubuntu上安装git ...

  6. 一个简单的HTTP服务器的实现

    我们继续我们的HTTP服务器的实现(使用别的代码来实现), 这个HTTP服务器的实现,我们主要就是关注TCP服务器中的recv还有send的处理. 首先,看一下HTTP,我们在用浏览器访问我们的TCP ...

  7. 记springBoot一直报Exception authenticating MongoCredential.

    项目场景: 场景:继上回docker安装好了mongo,然后自己本地项目尝试搭建使用连接mongo 问题描述: 按照别人写的文章教程一步步操作,最后自己本地尝试连接查询,跳出这个用户权限不够,发生了套 ...

  8. python面向对象(绑定方法与非绑定方法)

    # 一.绑定方法:特殊之处在于将调用者本身当做第一个参数自动传入 # 1)绑定给对象的方法:调用者是对象,自动传入的是对象 # 2)绑定给类的方法:调用者是类,自动传入的是类 # 类方法的应用 # 需 ...

  9. 三维模型3DTile格式轻量化压缩必要性分析

    三维模型3DTile格式轻量化压缩必要性分析 理解3DTile格式轻量化压缩的必要性,首先需要理解三维模型的复杂性和数据量.三维模型通常包含大量的顶点.面片和纹理信息,这使得其数据量非常大,尤其对于大 ...

  10. window-命令行操作

    window命令行操作 调起命令行-win+r输入cmd 网络探活 ping www.baidu.com 快捷启动应用 打开记事本 notepad 打开画图 mspaint 打开计算器 calc 命令 ...