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日

相关文章

  • gtx750ti和gtx1030哪款值得入手 gtx750ti和gtx1030对比评测

    GTX 750 Ti vs GTX 1030 对比评测 性能对比 指标 GTX 750 Ti GTX 1030 架构 Maxwell Pascal CUDA 核心数 640 384 基础频率 1020 MHz 1227 MHz Boost 频率 1085 MHz 1468 MHz 显存容量 2 GB GDDR5 2 GB GDDR5 显存频率 5400 MH…

    other 2023年10月16日
    00
  • C++ 的三种访问权限与三种继承方式

    C++中的三种访问权限为:public(公有)、private(私有)和protected(保护)。而C++中的三种继承方式为:public继承、private继承和protected继承。下面就为大家详细讲解一下这些内容。 三种访问权限 1. public public是一个允许最广泛的访问控制级别。在public访问级别下,外部用户可以通过对象(或指向对…

    other 2023年6月26日
    00
  • 在 Vue 项目中引入 tinymce 富文本编辑器的完整代码

    让我们来详细讲解在 Vue 项目中引入 tinymce 富文本编辑器的完整代码攻略。 引入 tinymce 富文本编辑器 首先,我们需要安装 tinymce,并通过 npm 安装 tinymce-vue 组件,示例代码如下: npm install tinymce -D npm install @tinymce/tinymce-vue -D 注册 tinym…

    other 2023年6月20日
    00
  • 苹果iOS9.3.2 Beta1开发者预览版固件更新发布 bug修复和改进

    苹果iOS9.3.2 Beta1开发者预览版固件更新发布 bug修复和改进攻略 苹果公司于2016年4月7日发布了iOS 9.3.2 Beta1 开发者预览版固件更新。此次更新修复了若干软件缺陷和提高了性能优化,让用户体验更加完善。 安装iOS 9.3.2 Beta1预览版 要安装 iOS 9.3.2 Beta1 预览版,首先要成为苹果开发者,然后就可以前往…

    other 2023年6月26日
    00
  • Win11资源管理器一直不断重启怎么办?

    针对“Win11资源管理器一直不断重启”的问题,我为您提供以下解决方案: 方法一:修复或重置资源管理器 重置或修复资源管理器是一种经常被使用的方法,可以通过执行以下两个步骤实现: 重置资源管理器: 步骤1:以管理员身份打开任务管理器(按下Ctrl + Shift+ Esc)。 步骤2:在「进程」选项卡,找到和标识「Windows Explorer」的选项,然…

    other 2023年6月26日
    00
  • WinXP系统关机时提示“dwwin.exe初始化失败”的故障分析及四种解决方法

    WinXP系统关机时提示“dwwin.exe初始化失败”的故障分析及四种解决方法 问题描述: 在使用WinXP系统时,可能会出现关机时提示“dwwin.exe初始化失败”的情况,这个问题会导致系统不能正常关机,严重影响用户体验。 故障分析: 症状描述 出现“dwwin.exe初始化失败”的提示信息时,可能会伴随着蓝屏、死机等问题。 故障原因 “dwwin.e…

    other 2023年6月20日
    00
  • Java如何给变量取合适的命名

    Java变量命名攻略 在Java中,给变量取合适的命名是一项重要的编程实践。良好的命名可以提高代码的可读性和可维护性。下面是一些关于如何给变量取合适命名的攻略: 1. 使用有意义的名称 变量的名称应该能够清晰地表达其用途和含义。避免使用单个字母或无意义的缩写作为变量名。相反,使用描述性的名称,以便其他开发人员能够轻松理解变量的用途。 示例1: // 不好的命…

    other 2023年8月5日
    00
  • 怎样删除Git中缓存的用户名和密码

    当我们使用Git执行一些敏感操作时,可能会由于未设置SSH密钥而要求输入用户名和密码。Git会缓存这些信息,以便在以后的操作中自动填写这些信息。但是,有时候我们可能会想要删除这些缓存的用户名和密码,例如更改GitHub账户密码后需要更新Git缓存的信息。 下面是删除Git缓存的用户名和密码的完整攻略: 方法1:使用Git Config命令删除缓存的用户名和密…

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