📅  最后修改于: 2023-12-03 15:10:43.594000             🧑  作者: Mango
在二叉树中,两个节点之间的距离指的是从节点A到节点B的最短路径所包含的边数。我们可以使用深度优先搜索或广度优先搜索算法来查找二叉树中的两个节点之间的距离。
深度优先搜索 (DFS) 和广度优先搜索(BFS) 都可以用来查找二叉树中两个节点之间的距离。但是,DFS 更容易实现,因为它递归调用了树的结构。
在二叉树中,我们可以使用递归方法来实现深度优先搜索。假设我们要查找二叉树中节点 A 到节点 B 的距离,我们可以按照以下步骤进行:
具体实现可以参考以下代码:
class Node:
def __init__(self, val: int, left=None, right=None):
self.val = val
self.left = left
self.right = right
def distance(root: Node, p: Node, q: Node) -> int:
if not root:
return 0
if root == p or root == q:
return 0
left_dist = distance(root.left, p, q)
right_dist = distance(root.right, p, q)
if left_dist == -1 and right_dist == -1:
return -1
elif left_dist == -1:
return right_dist + 1
elif right_dist == -1:
return left_dist + 1
else:
return left_dist + right_dist + 2
为了测试上述算法的正确性,我们使用以下代码创建一棵二叉树,并查找其中两个节点之间的距离:
root = Node(1,
Node(2, Node(4), Node(5)),
Node(3, Node(6), Node(7)))
assert distance(root, root.left, root.right) == 2
assert distance(root, root.left, root.left.right) == 1
assert distance(root, root.left.left, root.right.right) == 4
我们介绍了如何使用深度优先搜索算法来查找二叉树中两个节点之间的距离。具体而言,我们使用了递归函数来搜索二叉树中的节点,并返回它们之间的距离。此外,我们还提供了测试用例来验证算法的正确性。