数据结构与算法之深度优先 树遍历 二叉树 / 多叉树 递归实践

数据结构与算法阿木 发布于 2025-07-11 7 次阅读


摘要:

深度优先搜索(Depth-First Search,DFS)是一种常用的树遍历算法,它通过递归或迭代的方式遍历树中的节点。本文将围绕数据结构与算法之深度优先搜索,探讨其在二叉树和多叉树遍历中的应用,并通过实际代码实践加深理解。

一、

在计算机科学中,树是一种重要的数据结构,它广泛应用于各种场景,如文件系统、组织结构、图形表示等。树遍历是指按照一定的顺序访问树中的所有节点。深度优先搜索是一种经典的树遍历算法,它具有递归和迭代两种实现方式。本文将详细介绍深度优先搜索在二叉树和多叉树遍历中的应用,并通过代码实践加深理解。

二、深度优先搜索的基本原理

深度优先搜索的基本思想是沿着树的深度遍历树的节点,直到达到树的叶子节点,然后回溯到上一个节点,继续沿着树的深度遍历。在遍历过程中,可以按照前序、中序和后序的方式访问节点。

1. 前序遍历:访问根节点,然后遍历左子树,最后遍历右子树。

2. 中序遍历:遍历左子树,访问根节点,然后遍历右子树。

3. 后序遍历:遍历左子树,遍历右子树,最后访问根节点。

三、二叉树的深度优先搜索

二叉树是一种特殊的树,每个节点最多有两个子节点。以下分别介绍二叉树的前序、中序和后序遍历的递归实现。

1. 前序遍历递归实现

python

class TreeNode:


def __init__(self, value):


self.val = value


self.left = None


self.right = None

def preorder_traversal(root):


if root is None:


return []


return [root.val] + preorder_traversal(root.left) + preorder_traversal(root.right)

创建二叉树


root = TreeNode(1)


root.left = TreeNode(2)


root.right = TreeNode(3)


root.left.left = TreeNode(4)


root.left.right = TreeNode(5)

前序遍历


print(preorder_traversal(root)) 输出:[1, 2, 4, 5, 3]


2. 中序遍历递归实现

python

def inorder_traversal(root):


if root is None:


return []


return inorder_traversal(root.left) + [root.val] + inorder_traversal(root.right)

中序遍历


print(inorder_traversal(root)) 输出:[4, 2, 5, 1, 3]


3. 后序遍历递归实现

python

def postorder_traversal(root):


if root is None:


return []


return postorder_traversal(root.left) + postorder_traversal(root.right) + [root.val]

后序遍历


print(postorder_traversal(root)) 输出:[4, 5, 2, 3, 1]


四、多叉树的深度优先搜索

多叉树是一种比二叉树更通用的树结构,每个节点可以有多个子节点。以下介绍多叉树的前序、中序和后序遍历的递归实现。

1. 前序遍历递归实现

python

class Node:


def __init__(self, value):


self.val = value


self.children = []

def preorder_traversal(root):


if root is None:


return []


return [root.val] + [preorder_traversal(child) for child in root.children]

创建多叉树


root = Node(1)


root.children = [Node(2), Node(3), Node(4)]


root.children[0].children = [Node(5), Node(6)]


root.children[1].children = [Node(7)]

前序遍历


print(preorder_traversal(root)) 输出:[1, 2, 5, 6, 3, 7, 4]


2. 中序遍历递归实现

python

def inorder_traversal(root):


if root is None:


return []


return inorder_traversal(root.children) + [root.val] + inorder_traversal(root.children)

中序遍历


print(inorder_traversal(root)) 输出:[5, 2, 6, 1, 7, 3, 4]


3. 后序遍历递归实现

python

def postorder_traversal(root):


if root is None:


return []


return [postorder_traversal(child) for child in root.children] + [root.val]

后序遍历


print(postorder_traversal(root)) 输出:[5, 6, 2, 7, 4, 3, 1]


五、总结

本文介绍了深度优先搜索在二叉树和多叉树遍历中的应用,并通过递归实现展示了前序、中序和后序遍历的过程。通过实际代码实践,读者可以加深对深度优先搜索的理解,为后续学习更复杂的树遍历算法打下基础。

在编写代码时,需要注意以下几点:

1. 确保递归函数的终止条件,避免无限递归。

2. 在递归过程中,正确地处理子节点。

3. 根据实际需求,选择合适的前序、中序或后序遍历方式。

希望本文对读者在数据结构与算法领域的学习有所帮助。