📜  查询树中子树的 DFS(1)

📅  最后修改于: 2023-12-03 15:26:40.139000             🧑  作者: Mango

查询树中子树的 DFS

在树结构中,查询某个节点的子树是一个常见的需求。DFS(深度优先搜索)是查询树中子树的一种有效的方法。它遍历整棵树,并从根节点开始查找,找到目标节点,然后继续遍历目标节点的所有子节点。

实现思路

对于 DFS 搜索树中的子树,我们可以使用以下步骤实现:

  1. 针对目标节点进行深度优先搜索。
  2. 当找到目标节点时,记录当前节点的编号。
  3. 继续遍历目标节点的所有子节点,直到所有子节点都被访问过。
代码实现

下面是一个 Python 的实现示例:

# 定义一个图的节点类
class Node:
    def __init__(self, value):
        self.value = value
        self.children = []

# 实现 DFS 函数,搜索树中的子树
def dfs(node, target, result):
    if node is None:
        return False

    # 找到目标节点时记录节点编号
    if node.value == target:
        result.append(node.value)

    # 遍历当前节点的所有子节点
    for child in node.children:
        dfs(child, target, result)

    return True

# 测试代码
root = Node(1)
node2 = Node(2)
node3 = Node(3)
node4 = Node(4)
node5 = Node(5)

node2.children = [node4]
node3.children = [node5]
root.children = [node2, node3]

result = []
dfs(root, 4, result)
print(result) # 输出 [4]

在该示例中,我们定义了一个 Node 类来代表树的节点。然后,我们实现了 dfs 函数,该函数接受三个参数:当前节点、目标节点以及结果列表。dfs 函数使用了递归的方式遍历整棵树,遇到目标节点时记录节点编号,并遍历所有子节点。最终,当遍历完成后,结果列表中将包含所有符合条件的节点编号。

在测试代码中,我们创建了一棵树,并将目标节点设置为节点 4。运行 dfs 函数后,输出结果为 [4],这意味着节点 4 是节点 1 的子树中的一个节点。