Python3 关于二叉树的广度优先遍历

本文介绍了如何使用Python3进行二叉树的广度优先遍历,涉及队列、根节点和挂节点等概念,执行结果显示为[50, 20, 60, 15, 30, 70]。" 137568550,22892735,Vue项目集成ECharts 3D Flights GL路径图,"['vue.js', 'echarts', '3d']
摘要由CSDN通过智能技术生成

遍历二叉树之前我们先了解一下涉及到的知识

(1)队列

>>> import queue
>>> q = queue.Queue()
>>> q.put(1)
>>> q.put(2)
>>> q.put(3)
>>> q.get()
1
>>> q.get()
2
>>> q.get()
3
>>> q.empty()
True

(2)Node:根结点

>>> class Node:
...     def __init__(self,value):
...         self.value  = value  #节点数据
...         self.left = None     #存当前节点左节点指针
...         self.right = None    #存当前节点右节点指针
...
>>> Node(50)
<__main__.Node object at 0x000000000237C780>
>>> node = Node(50)
>>> node.value
50

(3)挂结点

>>> left = Node(20)
>>> node.left = left
>>> node.left.value
20
>>> node.right = Node(60)
>>> node.right.value
60

以上知识了解后,我们来看看怎么实现遍历

# encoding=utf-8
from queue import Queue

class TreeNode(object):  #结点类
    def __init__(self,var,left=None,right=None):
        self.var = var
        self.left = left
        self.right = right

class BinaryTree(object): #二叉树的类
    def __init__(self,root = None):  #设定了二叉树的根节点
        self.root = root

    def breathSearth(self):  #广度遍历
        if self.root == None: #判断是不是空,容错的。
            return None
        retList = []          #用来存储遍历后的结果
        queue = Queue()       #创建队列存储要遍历的节点
        queue.put(self.root)  #把树根节点作为种子节点放到队列中
        while queue.empty() is not True: #判断队列是否为空
            node = queue.get()           #如果不空,就取一个值
            retList.append(node.var)     #把取到的值加入结果列表
            if node.left != None:    #判断当前结点的左结点有值        
                queue.put(node.left)    #就加入队列
            if node.right != None:       
                queue.put(node.right)
        
        return retList   


if __name__ == '__main__':
    rootNode = TreeNode(50)

    #给根节点左子树挂节点
    rootNode.left = TreeNode(20,left=TreeNode(15),right=TreeNode(30))

    #给根节点由右子树挂节点
    rootNode.right = TreeNode(60,right=TreeNode(70))

    tree = BinaryTree(rootNode)
    retList = tree.breathSearth()
    print (retList)

执行结果:[50, 20, 60, 15, 30, 70]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值