Python 递归式实现二叉树前序,中序,后序遍历

Python递归式实现二叉树前序、中序、后序遍历

在二叉树中,前序、中序、后序遍历是常用的遍历方式。其中,前序遍历的顺序是先遍历根节点,然后遍历其左子树,最后遍历其右子树(根-左-右);中序遍历的顺序是先遍历左子树,再遍历根节点,最后遍历右子树(左-根-右);后序遍历的顺序是先遍历左子树,再遍历右子树,最后遍历根节点(左-右-根)。Python可以用递归的方式实现这三种遍历方式。

实现步骤

1.定义二叉树节点类

class TreeNode(object):
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None

2.定义二叉树类

class BinaryTree(object):
    def __init__(self):
        self.root = None

3.实现三种遍历方式

#前序遍历
def preorder_traversal(self, node):
    if node is not None:
        print(node.val, end=" ")
        self.preorder_traversal(node.left)
        self.preorder_traversal(node.right)
#中序遍历
def inorder_traversal(self, node):
    if node is not None:
        self.inorder_traversal(node.left)
        print(node.val, end=" ")
        self.inorder_traversal(node.right)
#后序遍历
def postorder_traversal(self, node):
    if node is not None:
        self.postorder_traversal(node.left)
        self.postorder_traversal(node.right)
        print(node.val, end=" ")

其中,node为二叉树节点。

示例

下面我们来看两个二叉树的前序、中序、后序遍历结果。

例1:输入如下二叉树

    1
  /   \
2      3

则出现以下结果:

tree = BinaryTree()
tree.root = TreeNode(1)
tree.root.left = TreeNode(2)
tree.root.right = TreeNode(3)
print("前序遍历:", end=" ")
tree.preorder_traversal(tree.root)
print("\n中序遍历:", end=" ")
tree.inorder_traversal(tree.root)
print("\n后序遍历:", end=" ")
tree.postorder_traversal(tree.root)

输出:

前序遍历: 1 2 3 
中序遍历: 2 1 3 
后序遍历: 2 3 1

例2:输入如下二叉树

    5  
   / \  
  3   8  
 / \   \  
1   4   10

则出现以下结果:

tree = BinaryTree()
tree.root = TreeNode(5)
tree.root.left = TreeNode(3)
tree.root.right = TreeNode(8)
tree.root.left.left = TreeNode(1)
tree.root.left.right = TreeNode(4)
tree.root.right.right = TreeNode(10)
print("前序遍历:", end=" ")
tree.preorder_traversal(tree.root)
print("\n中序遍历:", end=" ")
tree.inorder_traversal(tree.root)
print("\n后序遍历:", end=" ")
tree.postorder_traversal(tree.root)

输出:

前序遍历: 5 3 1 4 8 10 
中序遍历: 1 3 4 5 8 10 
后序遍历: 1 4 3 10 8 5

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 递归式实现二叉树前序,中序,后序遍历 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 详解python操作生成excel表格 并且填充数据

    详解Python操作生成Excel表格 并且填充数据 Excel表格是办公、数据分析、科研等领域经常使用的工具之一。Python作为一门高效的编程语言,拥有强大的数据处理能力,经常被用于表格数据的处理与分析。因此,Python操作Excel表格成为我们必须学会的一项技能之一。 在本篇文章中,我们将详细解释如何在Python中生成Excel表格并且填充数据。 …

    其他 2023年3月28日
    00
  • Java实现复原IP地址的方法

    Java实现复原IP地址的方法 复原IP地址是指将一个字符串转换为合法的IP地址。在Java中,可以使用递归和回溯的方法来实现这个功能。下面是一个完整的攻略,包含了详细的步骤和两个示例说明。 步骤 定义一个函数restoreIpAddresses,该函数接受一个字符串作为输入,并返回所有可能的合法IP地址。 在restoreIpAddresses函数中,创建…

    other 2023年7月31日
    00
  • uniapp小程序实战之利用腾讯地图获取定位

    Uniapp小程序实战之利用腾讯地图获取定位 简介 本文将详细介绍如何使用Uniapp和腾讯地图API获取用户的位置信息,包括如下内容: 如何在Uniapp项目中引入腾讯地图API 如何获取用户的地理位置信息 步骤 步骤一:引入腾讯地图API 在Uniapp项目中使用腾讯地图API需要在项目的 index.html 文件中添加如下代码: <script…

    other 2023年6月26日
    00
  • c#版asp.netwebapi使用示例

    C#版ASP.NET WebAPI使用示例 什么是ASP.NET WebAPI ASP.NET Web API是一个开放源代码的framework,用于构建HTTP服务,可以轻松地开发出支持各种客户端的REST API。ASP.NET Web API具有简单易用的结构,并且在开发中可以与其他ASP.NET功能(如MVC)很好地集成。 开始使用ASP.NET …

    其他 2023年3月28日
    00
  • mssql 30万条数据 搜索文本字段的各种方式对比

    针对“mssql 30万条数据 搜索文本字段的各种方式对比”的攻略,可以从以下几个方面进行讲解: 1. 文本搜索的基本概念 在进行文本搜索之前,需要了解一些基本概念。在MSSQL中,文本字段可以使用VARCHAR()、NVARCHAR()、TEXT、NTEXT等数据类型定义,这些类型之间的差异在存储内容的长度上有所区别。在查询中,我们通常会使用LIKE、CO…

    other 2023年6月25日
    00
  • 秒懂sqlintersect

    当然,我很乐意为您提供有关“秒懂SQL Intersect”的完整攻略。以下是详细的步骤和两个示例: 1 SQL Intersect SQL Intersect是一种用于比较两个或多个SELECT语句结果的操作符。它返回两个结果集的交集,即两个结果集中都存在的行。 2 SQL Intersect语法 以下是SQLsect的语法: SELECT column1…

    other 2023年5月6日
    00
  • 关于python:为什么不能安装cpickle

    在Python 3.x版本中,cpickle是一个用于序列化和反序列化Python对象的模块。但在某些情况下,我们可能会遇到不能安装cpickle的问题。本文详细介绍为什么会出现这个问题以及如何解决它。 为什么不能安装cpickle 在Python 3.x版本中,cpickle已经被弃用,取而代之是pickle模块。因此,在Python 3.x版本中,我们不…

    other 2023年5月7日
    00
  • window.onload的页面加载技巧

    当我们打开一个网页的时候,浏览器会依次加载 HTML、CSS、JavaScript等资源,而 window.onload 事件会在所有资源都加载完成后才会触发。所以通过 window.onload 来执行 JavaScript 操作可以保证页面中的所有元素都已经加载完成,从而避免因为元素还未加载完毕而出现错误的情况。 下面就是 window.onload 页…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部