下面是详细讲解“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技术站