资讯专栏INFORMATION COLUMN

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

kgbook / 3127人阅读

摘要:概要本文只实现了二叉树基本的几种遍历,增删改查,预计明天写完,后面的功能也尽量完善定义数据结构左节点右节点先序遍历先遍历顺序,根节点,遍历左子树,遍历右子树中序遍历中序遍历中序遍历顺序,遍历左子树,根节点,遍历右子树后序遍历后序遍历后序遍历

概要

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

定义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源码

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44617.html

相关文章

  • 【数据结构初阶】第八篇——叉树的链式结构(叉树遍历+层序遍历+链式结构的实现+相关

    摘要:代码实现如下二叉树的创建与销毁二叉树的创建问题通过前序遍历的数组给定一串字符串,代表的是空树,其他的都是节点。 ⭐️本篇博客我要来和大家一起聊一聊数据结构中的二...

    BigNerdCoding 评论0 收藏0
  • 数据结构:叉树

    摘要:链式存储结构由于二叉树的每个结点最多有两个孩子,所以为每个结点设计一个数据域和两个指针域。最终能得到二叉树的完整结构。这篇文章主要介绍树结构中的一种特殊存在——二叉树。主要内容有: 二叉树的概念 二叉树的基本结构 二叉树的操作 概念 二叉树: 每个结点最多有两个子结点,两个子结点是有次序的,且子结点次序不能颠倒。两个子结点一般称之为左结点及右结点。 层次: 在树中,节点的层次从...

    Ashin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<