首页 > 编程语言 >Python算法——二叉树遍历

Python算法——二叉树遍历

时间:2023-12-17 17:32:56浏览次数:39  
标签:遍历 Python 前序 traversal 二叉树 root 节点

Python中的二叉树遍历算法详解

二叉树是一种常见的树状数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。遍历二叉树是访问树的所有节点并按照特定顺序输出它们的过程。在本文中,我们将讨论二叉树的三种主要遍历算法:前序遍历、中序遍历和后序遍历,并提供相应的Python代码实现。

1. 前序遍历(Preorder Traversal)

前序遍历按照“根-左-右”的顺序访问二叉树节点。具体步骤如下:

  1. 访问根节点。
  2. 对根节点的左子树进行前序遍历。
  3. 对根节点的右子树进行前序遍历。 以下是前序遍历的Python实现:
class TreeNode:
    def __init__(self, value):
        self.val = value
        self.left = None
        self.right = None

def preorder_traversal(root):
    if root is not None:
        print(root.val, end=" ")  # 访问根节点
        preorder_traversal(root.left)  # 对左子树进行前序遍历
        preorder_traversal(root.right)  # 对右子树进行前序遍历

2. 中序遍历(Inorder Traversal)

中序遍历按照“左-根-右”的顺序访问二叉树节点。具体步骤如下:

  1. 对根节点的左子树进行中序遍历。
  2. 访问根节点。
  3. 对根节点的右子树进行中序遍历。 以下是中序遍历的Python实现:
def inorder_traversal(root):
    if root is not None:
        inorder_traversal(root.left)  # 对左子树进行中序遍历
        print(root.val, end=" ")  # 访问根节点
        inorder_traversal(root.right)  # 对右子树进行中序遍历

3. 后序遍历(Postorder Traversal)

后序遍历按照“左-右-根”的顺序访问二叉树节点。具体步骤如下:

  1. 对根节点的左子树进行后序遍历。
  2. 对根节点的右子树进行后序遍历。
  3. 访问根节点。 以下是后序遍历的Python实现:

def postorder_traversal(root): if root is not None: postorder_traversal(root.left) # 对左子树进行后序遍历 postorder_traversal(root.right) # 对右子树进行后序遍历 print(root.val, end=" ") # 访问根节点

示例

考虑以下二叉树:

1
   / \
  2   3
 / \
4   5

创建二叉树:

root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

分别使用前序、中序和后序遍历输出:

print("前序遍历:", end=" ")
preorder_traversal(root)

print("\n中序遍历:", end=" ")
inorder_traversal(root)

print("\n后序遍历:", end=" ")
postorder_traversal(root)

输出结果为:

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

这些遍历算法是在不同情况下解决二叉树问题时非常有用的工具。了解它们的工作原理,并能够实现相应的算法,有助于深入理解树结构的特性。

标签:遍历,Python,前序,traversal,二叉树,root,节点
From: https://blog.51cto.com/u_16295743/8862502

相关文章

  • 【python常用模块之time时间模块】---时间模块(time/datetime)
    title:【python常用模块之time时间模块】---时间模块(time/datetime)date:2023-12-1716:54:06updated:2023-12-1717:00:00description:【python常用模块之time时间模块】---时间模块(time/datetime)cover:https://home.cnblogs.com/u/dream-ze/【一】时间模......
  • 【python入门之OS模块介绍】---OS模块介绍
    title:【python入门之OS模块介绍】---OS模块介绍date:2023-12-1615:54:06updated:2023-12-1616:20:00description:【python入门之OS模块介绍】---OS模块介绍cover:https://home.cnblogs.com/u/dream-ze/【一】OS模块的介绍os模块是Python编程语言中......
  • java实现二叉树前序搜索输出深度完整代码
    importjava.util.Scanner;//1:无需package//2:类名必须Main,不可修改classTreeNode{publicintval;publicTreeNodeleft;publicTreeNoderight;publicTreeNode(intval){this.val=val;this.left=null;this.right=null;}}p......
  • python之tkinter的鼠标样式
    tkinter的Label、Button、Enter等等cursor都可以使用表中特性改变鼠标样式。取值样式备注arrow based_arrow_down based_arrow_up boat bogosity bottom_left_corner bottom_right_corner bottom_side bottom_tee box_spiral center_ptr circle clock coffee_mug cro......
  • 【python扩展之软件开发目录规范】---软件开发目录规范
    title:【python扩展之软件开发目录规范】---软件开发目录规范date:2023-12-1618:54:06updated:2023-12-1619:20:00description:【python扩展之软件开发目录规范】---软件开发目录规范cover: https://blog.csdn.net/DiligentGG/article/details/125784751......
  • 深度解析Python上下文管理器:优雅资源管理与异常处理
    Python是一种功能强大且灵活的编程语言,它提供了许多高级工具和特性来简化开发过程。其中之一就是上下文管理器,它允许开发者更优雅地处理资源管理和异常处理。本文将深入探讨Python中上下文管理器的工作原理、使用方法以及实际应用。1. 什么是上下文管理器?上下文管理器是一种Python......
  • 【python基础之包介绍】---包
    title:【python基础之包介绍】---包date:2023-12-0618:54:06updated:2023-12-0619:20:00description:【python基础之包】---包cover:https://home.cnblogs.com/u/dream-ze/包【1】什么是包简介包是一个模块的集合,它可以将多个模块的功能组合到一起......
  • K-means聚类思想及其Python实现
    聚类就是将一个庞杂数据集中具有相似特征的数据自动归类到一起,称为一个簇,簇内的对象越相似,聚类的效果越好。“相似”这一概念,是利用距离标准来衡量的,我们通过计算对象与对象之间的距离远近来判断它们是否属于同一类别,即是否是同一个簇。聚类是一种无监督的学习(UnsupervisedLearn......
  • 开启摄像头(python)
    importcv2vc=cv2.VideoCapture(0)fps=20000size=(int(vc.get(cv2.CAP_PROP_FRAME_WIDTH)),int(vc.get(cv2.CAP_PROP_FRAME_HEIGHT)))vw=cv2.VideoWriter('test2-7out.avi',cv2.VideoWriter_fourcc('X',�......
  • 集合遍历
    importjava.util.ArrayList;//创建一个集合,添加内容并遍历,规范打印格式:[元素一,元素二,元素三]//集合中如果想添加基本数据类型要转换成包装类publicclassPractice01{publicstaticvoidmain(String[]args){ArrayList<Integer>list=newArrayList<>();......