Python—二叉树数据结构
二叉树
简介:
二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。
二叉树二叉树的链式存储:
将二叉树的节点定义为一个对象,节点之间通过类似链表的链接方式来连接。
节点定义:
二叉树的遍历:
二叉树的遍历方式:
前序遍历:EACBDGF
中序遍历:ABCDEGF
后序遍历:BDCAFGE
层次遍历:EAGCFBD
代码实现:
- # _*_ coding=utf-8 _*_
- """
- 实现一个二叉树结果,并进行遍历
- E
- / \
- A G
- \ \
- C F
- / \
- B D
- """
- from collections import deque
- class BinaryTree(object):
- def __init__(self, data):
- self.data = data
- self.child_l = None
- self.child_r = None
- # 创建
- a = BinaryTree("A")
- b = BinaryTree("B")
- c = BinaryTree("C")
- d = BinaryTree("D")
- e = BinaryTree("E")
- f = BinaryTree("F")
- g = BinaryTree("G")
- # 构造节点关系
- e.child_l = a
- e.child_r = g
- a.child_r = c
- c.child_l = b
- c.child_r = d
- g.child_r = f
- # 设置根
- root = e
- def pre_order(tree):
- """
- 前序遍历:root -> child_l -> child_r
- :param tree: the root of tree
- :return:
- """
- if tree:
- print(tree.data, end=',')
- # print("")
- pre_order(tree.child_l)
- pre_order(tree.child_r)
- def in_order(tree):
- """
- 中序遍历:child_l -> root -> child_r
- :param tree:
- :return:
- """
- if tree:
- in_order(tree.child_l)
- print(tree.data, end=',')
- in_order(tree.child_r)
- def post_order(tree):
- """
- 后序遍历:child_l -> child_r -> root
- :param tree:
- :return:
- """
- if tree:
- post_order(tree.child_l)
- post_order(tree.child_r)
- print(tree.data, end=',')
- def level_order(tree):
- """
- 层次遍历:E -> AG -> CF -> BD
- 使用队列实现
- :param tree:
- :return:
- """
- queue = deque()
- queue.append(tree) # 先把根添加到队列
- while len(queue): # 队列不为空
- node = queue.popleft()
- print(node.data, end=',')
- if node.child_l:
- queue.append(node.child_l)
- if node.child_r:
- queue.append(node.child_r)
- pre_order(root)
- print('')
- in_order(root)
- print('')
- post_order(root)
- print('')
- level_order(root)
Python—二叉树数据结构的更多相关文章
- python 与数据结构
在上面的文章中,我写了python中的一些特性,主要是简单为主,主要是因为一些其他复杂的东西可以通过简单的知识演变而来,比如装饰器还可以带参数,可以使用装饰类,在类中不同的方法中调用,不想写的太复杂, ...
- [0x00 用Python讲解数据结构与算法] 概览
自从工作后就没什么时间更新博客了,最近抽空学了点Python,觉得Python真的是很强大呀.想来在大学中没有学好数据结构和算法,自己的意志力一直不够坚定,这次想好好看一本书,认真把基本的数据结构和算 ...
- 用Python实现数据结构之二叉搜索树
二叉搜索树 二叉搜索树是一种特殊的二叉树,它的特点是: 对于任意一个节点p,存储在p的左子树的中的所有节点中的值都小于p中的值 对于任意一个节点p,存储在p的右子树的中的所有节点中的值都大于p中的值 ...
- 用Python实现数据结构之树
树 树是由根结点和若干颗子树构成的.树是由一个集合以及在该集合上定义的一种关系构成的.集合中的元素称为树的结点,所定义的关系称为父子关系.父子关系在树的结点之间建立了一个层次结构.在这种层次结构中有一 ...
- Python -- 堆数据结构 heapq - I love this game! - 博客频道 - CSDN.NET
Python -- 堆数据结构 heapq - I love this game! - 博客频道 - CSDN.NET Python -- 堆数据结构 heapq 分类: Python 2012-09 ...
- python实现数据结构单链表
#python实现数据结构单链表 # -*- coding: utf-8 -*- class Node(object): """节点""" ...
- 《用Python解决数据结构与算法问题》在线阅读
源于经典 数据结构作为计算机从业人员的必备基础,Java, c 之类的语言有很多这方面的书籍,Python 相对较少, 其中比较著名的一本 problem-solving-with-algorithm ...
- (python数据分析)第03章 Python的数据结构、函数和文件
本章讨论Python的内置功能,这些功能本书会用到很多.虽然扩展库,比如pandas和Numpy,使处理大数据集很方便,但它们是和Python的内置数据处理工具一同使用的. 我们会从Python最基础 ...
- python的数据结构分类,以及数字的处理函数,类型判断
python的数据结构分类: 数值型 int:python3中都是长整形,没有大小限制,受限内存区域的大小 float:只有双精度型 complex:实数和虚数部分都是浮点型,1+1.2J bool: ...
随机推荐
- 访问eureka 显示xml
两种解决方式: 方式一:(我是通过此方式解决的) 一个博客“http://blog.csdn.net/l5764773160/article/details/77483730”,他的解决方案是: 将项 ...
- (一)微信小程序环境搭建
1 注册 首先 打开(https://mp.weixin.qq.com/)微信公众平台官网 选着 小程序 之后 在新的页面选择 选着前往注册 按照提示注册 注意:个人版和企业版有一定的区别 2 开发者 ...
- 3.python进制及其之间的转换
- 十一、JavaScript之两种注释方法
一.代码如下 二.运行效果如下
- 安装完CUDA Toolkit,VS2010调试项目控制台一闪而过
选择菜单栏的调试>>开始执行(不调试),就不一闪而过:
- [转]SparkSQL的自适应执行---Adaptive Execution
1 背景 本文介绍的 Adaptive Execution 将可以根据执行过程中的中间数据优化后续执行,从而提高整体执行效率.核心在于两点 执行计划可动态调整 调整的依据是中间结果的精确统计信息 2 ...
- junit基础学习之-junit3和4的区别(4)
junit3和junit4的使用区别如下 1.在JUnit3中需要继承TestCase类,但在JUnit4中已经不需要继承TestCase 2.在JUnit3中需要覆盖TestCase中的setUp和 ...
- jedis哨兵模式的redis组(集群),连接池实现。(客户端分片)
java 连接redis 我们都使用的 是jedis ,对于redis这种频繁请求的场景我们一般需要对其池化避免重复创建,即创建一个连接池 ,打开jedis的 jar包我们发现,jedis对池已经有 ...
- ES6 新特性(笔记)
1.定义变量 let a).块作用域 , 不同于var的函数作用域 b).不可以重复定义同一个变量名 注: {} ...
- python outline
1.列表/数组/numpy/Pandas Python list 初始化技巧 (2018-12-27 11:54) python3 sort list (2019-05-23 14:52) P ...