📅  最后修改于: 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是树中节点的数量。