二叉树的深度优先遍历python

本文详细介绍了二叉树的先序、中序和后序遍历算法,并通过实例展示了如何在Python中实现。理解这些遍历方式有助于数据检索和管理,是数据结构和算法的基础知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉树应用场景很多,比如:数据检索,数据管理
二叉树的遍历,分为深度优先遍历,以及广度优先遍历。在深度优先遍历中,具体分为如下三种:

  1. 先序遍历:先访问根节点,再遍历左子树,再遍历右子树;
  2. 中序遍历:先遍历左子树,再访问根节点,再遍历右子树;
  3. 后序遍历:先遍历左子树,再遍历右子树,再访问根节点

在这里插入图片描述
对于上图的二叉树,其先序遍历结果是:50,20,15,30,60,70;其中序遍历结果是:15,20,30,50,60,70;其后序遍历结果是:15,30,20,70,60,50

# encoding=utf-8

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 preOrder(self,retList,node='root'):
        if node == 'root':
            node = self.root
        if node != None:
            retList.append(node)
            print ([i.var for i in retList])
            self.preOrder(retList,node.left)
            self.preOrder(retList,node.right)
        return retList

    def inOrder(self,retList,node='root'):
        if node == 'root':
            node = self.root
        if node != None:
            self.inOrder(retList,node.left)
            retList.append(node)
            print ([i.var for i in retList])
            self.inOrder(retList,node.right)
        return retList

    def postOrder(self,retList,node='root'):
        if node == 'root':
            node = self.root
        if node != None:
            self.postOrder(retList,node.left)
            self.postOrder(retList,node.right)
            retList.append(node)
            print ([i.var for i in retList])
        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))
    binaryTree = BinaryTree(rootNode)
    ret = binaryTree.preOrder([],binaryTree.root)
    for i in ret:
        print (i.var,end=" ")
    print("")

    ret = binaryTree.inOrder([],binaryTree.root)
    for i in ret:
        print (i.var,end=" ")
    print("")

    ret = binaryTree.postOrder([],binaryTree.root)
    for i in ret:
        print (i.var,end=" ")

执行结果:
先序遍历执行结果:
在这里插入图片描述
中序遍历执行结果:
在这里插入图片描述
后序遍历执行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值