python-二叉树:前、中、后、层序遍历

概要

本文只实现了二叉树基本的几种遍历,增、删、改、查,预计明天写完,后面的功能也尽量完善

定义Node数据结构
class Node(object):
    def __init__(self, data):
        self.data = data
        self.lft = None #左节点
        self.rgt = None #右节点

先序遍历

class BTree(object):
    def __init__(self):
        self._root = None
        self._size = 0

    def preOrder(self):
        '''
        先遍历顺序:
        1,根节点
        2,遍历左子树
        3,遍历右子树
        '''
        btree = []
        
        def recurse(node):
            if node != None:
                btree.append(node.data)
                recurse(node.lft)
                recurse(node.rgt)
        
        recurse(self._root)
        return btree
中序遍历
class BTree(object):
    def __init__(self):
        self._root = None
        self._size = 0
    
    # 中序遍历
    def inOrder(self):
        '''
        中序遍历顺序:
        1,遍历左子树
        2,根节点
        3,遍历右子树
        '''
        btree = []
        
        def recurse(node):
            if node != None:
                recurse(node.lft)
                btree.append(node.data)
                recurse(node.rgt)
        
        recurse(self._root)
        return btree
后序遍历
class BTree(object):
    def __init__(self):
        self._root = None
        self._size = 0
    
    # 后序遍历
    def postOrder(self):
        '''
        后序遍历顺序:
        1,遍历左子树
        2,遍历右子树
        3,根节点
        '''
        btree = []
        
        def recurse(node):
            if node != None:
                recurse(node.lft)
                recurse(node.rgt)
                btree.append(node.data)
        
        recurse(self._root)
        return btree
层序遍历
from  collections import deque


class BTree(object):
    def __init__(self):
        self._root = None
        self._size = 0
    
    # 层序遍历
    def leverOrder(self):
        q = deque()
        q.append(self._root)
        btree = []
        while q:
            #dque是一个双向队列,先进先出是popleft
            node = q.popleft()
            btree.append(node.data)
            if node.lft:
                q.append(node.lft)
            if node.rgt:
                q.append(node.rgt)
        return btree
引用

github 源码Btree源码


geek成长
记录python学习点滴
12 声望
1 粉丝
0 条评论
推荐阅读
[学习笔记] 官方入门cifar-cnn代码改良和踩坑
摘要 整个例子是官方入门例子,也是我使用tensorflow训练的第一个模型 改进 重构代码,使用类和方法调用,jupyter notebook能方便展示,但我个人喜欢通过编译器调试和运行,所以进行封装 重写load_data方法,内置...

Geekrun阅读 1.2k

树,计算父节点的值
前段时间回答了一个类似的问题,产生了写一篇博客的想法。这个问题确实存在一些常见的的应用场景,比如一个多层组织结构中,已知每个员工的绩效分,希望计算各级部门的绩效分以便对部门评优。

边城9阅读 947评论 2

封面图
基于Sanic的微服务基础架构
使用python做web开发面临的一个最大的问题就是性能,在解决C10K问题上显的有点吃力。有些异步框架Tornado、Twisted、Gevent 等就是为了解决性能问题。这些框架在性能上有些提升,但是也出现了各种古怪的问题难以...

jysong6阅读 3.9k评论 3

滚蛋吧,正则表达式!
你是不是也有这样的操作,比如你需要使用「电子邮箱正则表达式」,首先想到的就是直接百度上搜索一个,然后采用 CV 大法神奇地接入到你的代码中?

良许4阅读 2.3k

又一款眼前一亮的Linux终端工具!
今天给大家介绍一款最近发现的功能十分强大,颜值非常高的一款终端工具。这个神器我是在其他公众号文章上看到的,但他们都没把它的强大之处介绍明白,所以我自己体验一波后,再向大家分享自己的体验。

良许5阅读 1.8k

FastAPI性能碾压Flask?
不止一次的听过,FastAPI性能碾压Flask,直追Golang,不过一直没有测试过,今天闲着没事测试一下看看结果。不知道是哪里出了问题,结果大跌眼镜。

二毛erma02阅读 10.2k评论 3

封面图
深入理解MySQL索引底层数据结构
在日常工作中,我们会遇见一些慢SQL,在分析这些慢SQL时,我们通常会看下SQL的执行计划,验证SQL执行过程中有没有走索引。通常我们会调整一些查询条件,增加必要的索引,SQL执行效率就会提升几个数量级。我们有没...

京东云开发者3阅读 581

封面图
12 声望
1 粉丝
宣传栏