二叉树设计

定义节点类

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. Vue实现图片瀑布流

    在线演示地址:点击前往 一,创建一个Waterfall组件 代码如下: <template> <div class="waterfall"> <!-- ...

  2. java学习 javaz-001 Helloworld 第一个demo

    java学习 javaz-001 Helloworld 第一个demo 目录 学习目标 前期准备 java sdk 1.8环境 编辑器IDE的选择 代码开发 目录结构 创建第一个java文件 创建第2 ...

  3. 关于vue.js:iview-Bug-5114在iview的Poptip气泡提示内调用DatePicker出现遮挡或同时关闭窗口等冲突问题[转]

    转自:https://lequ7.com/guan-yu-vuejsiviewbug5114-zai-iview-de-poptip-qi-pao-ti-shi-nei-diao-yong-datep ...

  4. pcm5102芯片解析之基本概念

    一 前记 1 在音频领域深耕,那就要不断的前行.最近有几个项目需要用到pcm5102这颗料,藉此机会,针对这个料进行深入的研究一下.做一一些简要的分析. 二 概念 音频芯片的指标,其实,很多年都没啥变 ...

  5. python数组基本用法实例解析

    一 数组的内容的查找 array的查找是依靠index,超出内容的会报错误 import array int_array = array.array('i', [0, 1, 2, 3, 1, 2]) ...

  6. Linux int型转换为char*型几种方法总结

    一 前记 这种转换,windows下最常用就是atoi()函数.可惜的是,在Linux中没有itoa()函数,只有atoi()   这点很有趣,居然不对称. 所以在Linux中实现从整型到char*的 ...

  7. Java递归实现全排列改进(一)---利用HashSet实现去重

    import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.Iter ...

  8. Morris遍历:常数空间遍历二叉树

    Morris遍历 cur有左树且第一次遍历到,去左孩子 没左树或者第二次遍历到,去右孩子 没右树,去后继节点 得到Morris序.对于该序列中出现两次的节点,只保留第一次遍历,结果就是先序遍历.只保留 ...

  9. 【报错处理】npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules/yarn

    一.报错现象 二.报错原因 权限不够 三.解决方法 加上sudo sudo npm install -g yarn

  10. 解决Idea找不到URL问题

    解决Idea找不到URL问题   我这几天遇到一个特别恶心的问题,查了很多资料,都是没用的后来自己静下心来,发现自己的import导包错了,我用的是jakarta,jakarta主要是利用Tomcat ...