python实现树的深度优先遍历与广度优先遍历详解

下面是详细讲解“Python实现树的深度优先遍历与广度优先遍历详解”的完整攻略。

1. 什么是树

树是一种非线性数据结构,它由若干个节点组成,每个节点可以有若干个子节点。树节点之间存在一种层次关系,其中上面的节点称根节点,最下面的节点称为叶子节点。

2. 树的遍历

树的遍历是指按照一定的顺序访问树的所有节点。常见的树的遍历方式有深度优先历和广度优先遍历。

2.1 深度优先遍历

深度优先遍历是指从根节点开始,沿着一条路径一直遍历到叶子节点,然后回溯到上一个节点,再遍历另条路径,直到遍历完整棵树。深度优遍历可以使用递归或栈来现。

以下是一个使用递归实现深优先遍历的示例。

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

def dfs(root):
    if not root:
        return

    print(root.val)
    dfs(root.left)
    dfs(root.right)

# 创建一棵树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

# 深度优先遍历
dfs(root)

输出结果为:

1
2
4
5
3

2.2 广度优先遍历

广度优先遍历是指从根节点开始,按照层次顺序遍历树的所有节点。广度优先遍历可以使用队列来实现。

以下是一个使用队列实现广度优先遍历的示例。

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

def bfs(root):
    if not root:
        return

    queue = [root]
    while queue:
        node = queue.pop(0)
        print(node.val)

        if node.left:
            queue.append(node.left)
        if node.right:
            queue.append(node.right)

# 创建一棵树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

# 广度优先遍历
bfs(root)

输出结果为:

1
2
3
4
5

3. 示例说明

以下是两个示例说明,分别是深度优先遍历和广度优先遍。

3.1 深度优先遍历

以下是一个递归实现深度优先遍历的示例,遍历一棵树。

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

def dfs(root):
    if not root:
        return

    print(root.val)
    dfs(root.left)
    dfs(root.right)

# 创建一棵树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

# 深度优先遍历
dfs(root)

输出结果为:

1
2
4
5
3

3.2 广度优遍

以下是使用队列实现广度优先遍历的示例,遍历一棵树。

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

def bfs(root):
    if not root:
        return

    queue = [root]
    while queue:
        node = queue.pop(0)
        print(node.val)

        if node.left:
            queue.append(node.left)
        if node.right:
            queue.append(node.right)

# 创建一棵树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

# 广度优先遍历
bfs(root)

输出结果为:

1
2
3
4
5

4. 总结

树的遍历是指按照一定的顺序访问树的所有节点。常见的树的遍历方式有深度优先遍历和广度优先遍历。本文介绍了深度优先遍历和广度优先遍历的实现方法,并提供了个示例说明,分别是深度优先遍历和广度优先遍历。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现树的深度优先遍历与广度优先遍历详解 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python 实现顺序高斯消元法示例

    Python 实现顺序高斯消元法示例 什么是顺序高斯消元法(Gaussian elimination)? 顺序高斯消元法是一种线性代数中的解方程组的基本方法,即利用矩阵变换将系数矩阵变成一个三角矩阵从而解方程组的方法。该方法基于矩阵变换的原理,比直接利用公式求解方程组更加简便高效。 代码实现 Python 实现顺序高斯消元法的代码如下: def gaussi…

    python 2023年5月19日
    00
  • Python基于爬虫实现全网搜索并下载音乐

    Python基于爬虫实现全网搜索并下载音乐 说明 本文档将介绍如何基于 Python 爬虫技术实现全网音乐的搜索和下载,包括以下步骤: 确定音乐搜索目标网站 使用 requests 库模拟请求获取页面信息 使用 BeautifulSoup 库解析页面HTML 使用正则表达式提取音乐链接和名称 使用 urllib 库下载音乐文件 1. 确定音乐搜索目标网站 在…

    python 2023年5月14日
    00
  • Python技法-序列拆分详解

    Python技法-序列拆分详解 在Python中,我们经常需要对序列进行拆分操作,这里我们将介绍Python中几种序列拆分的技巧。 一、使用*运算符拆分 如果我们需要将一个列表或元组中的元素拆分开来,可以使用*运算符。 a, *b = [1, 2, 3, 4] print(a) # 1 print(b) # [2, 3, 4] *x, y, z = rang…

    python 2023年5月14日
    00
  • 基于Python实现对PDF文件的OCR识别

    我将为你详细讲解“基于Python实现对PDF文件的OCR识别”的完整攻略。 简介 OCR(Optical Character Recognition)即光学字符识别,是指将图像中的文字、数字等字符转换成可以被计算机识别的编码格式的过程。在实际应用中,PDF文件曾经难以被OCR识别,但随着技术的发展,现在很多开源的OCR工具支持对PDF文件的识别了。 本篇攻…

    python 2023年5月18日
    00
  • 举例介绍Python中的25个隐藏特性

    Python是一门非常强大的编程语言,拥有许多隐藏的特性,这些特性可以帮助我们更好地编程。本篇攻略将介绍Python中25个隐藏特性,包括但不限于: 1. 列表推导式 列表推导式提供了一种简洁的方式来生成列表。例如: squares = [x**2 for x in range(1, 6)] print(squares) # 输出:[1, 4, 9, 16,…

    python 2023年5月14日
    00
  • python实现银行账户系统

    Python实现银行账户系统攻略 系统需求 在实现银行账户系统前,我们需要明确系统的需求: 用户可以注册账户,并设置初始余额; 用户可以查询当前余额; 用户可以进行存款、取款等操作; 用户可以查询交易明细。 代码实现 我们可以通过Python的面向对象编程实现银行账户系统。具体实现过程如下: 定义 BankAccount 类,并在类中包含以下功能: 构造函数…

    python 2023年5月30日
    00
  • Python argparse命令参数与config配置参数示例深入详解

    Python的argparse库是用于解析命令行参数的标准库,同时配合configparser模块使用可以实现命令行参数与配置文件参数共存。 命令行参数 使用argparse库解析命令行参数,主要包括以下步骤: 定义脚本的参数列表; 实例化ArgumentParser对象; 添加参数的名称、选项、值等信息; 调用parse_args()方法解析参数列表。 下…

    python 2023年6月3日
    00
  • Python爬虫小例子——爬取51job发布的工作职位

    Python爬虫小例子——爬取51job发布的工作职位 本文将介绍如何使用Python爬虫爬取51job发布的工作职位,并提供两个示例。 爬取51job发布的工作职位 51job是国内知名的招聘网站,提供了大量的工作职位信息。我们可以使用Python爬虫爬取51job发布的工作职位,并将其保存到本地文件中。下面是爬取51job发布的工作职位的步骤: 1. 分…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部