📌  相关文章
📜  检查两个节点是否在树中的同一路径上 | 2套(1)

📅  最后修改于: 2023-12-03 14:55:44.035000             🧑  作者: Mango

检查两个节点是否在树中的同一路径上

在树中,有时需要检查两个节点是否在同一路径上。这个问题可以使用深度优先搜索(DFS)来解决。

我们可以使用递归来遍历树中的所有路径,并在遍历每个节点时检查两个节点是否都在路径中。下面是一个可以实现这个功能的Python代码:

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

def is_same_path(root: TreeNode, p: TreeNode, q: TreeNode) -> bool:
    def dfs(node, path):
        if not node:
            return
        if node == p:
            path.append(1)
        elif node == q:
            path.append(2)
        if path and path[0] == 1 and path[-1] == 2:
            return True
        dfs(node.left, path)
        dfs(node.right, path)
        path.pop()

    return dfs(root, [])

此代码定义了一个TreeNode类,其中节点的值为val,左右子树为left和right。is_same_path函数使用深度优先遍历树中的所有路径,并使用一个列表来记录路径中的节点是否是p和q。如果p和q都出现在路径中,函数将返回True;否则,返回False。

这个算法时间复杂度是O(n),其中n是树中节点的数量。