返回
理解LeetCode 1740:Python 中二叉树距离查找算法
后端
2024-02-23 03:56:09
踏入算法的殿堂,我们今天将深入探讨LeetCode 1740:在二叉树中查找距离。本文将深入剖析这一经典问题,指导你使用Python代码巧妙地解决它。
问题
给定一棵二叉树的根节点root
、两个节点p
和q
,求解p
和q
之间的距离。
解题思路
我们采用深度优先搜索(DFS)算法,从root
节点开始,递归地探索二叉树。在每次递归调用中,我们检查当前节点是否是p
或q
,如果是,则记录其深度。
如果当前节点既不是p
也不是q
,则我们继续递归探索其左子树和右子树。如果在左子树或右子树中找到了p
或q
,则我们更新其深度并将其传递给父节点。
当我们遍历完整个二叉树后,p
和q
的深度差就是它们之间的距离。
def findDistance(root, p, q):
# 返回节点 `node` 到节点 `p` 和 `q` 的距离和
def dfs(node):
if not node:
return [-1, -1, 0]
left = dfs(node.left)
right = dfs(node.right)
# 如果当前节点是 `p` 或 `q`
if node.val == p.val:
return [node.val, -1, 1]
elif node.val == q.val:
return [-1, node.val, 1]
# 如果 `p` 或 `q` 在左子树或右子树中找到
if left[0] != -1:
return [left[0], left[1], left[2] + 1]
elif left[1] != -1:
return [-1, left[1], left[2] + 1]
elif right[0] != -1:
return [right[0], right[1], right[2] + 1]
elif right[1] != -1:
return [-1, right[1], right[2] + 1]
return [-1, -1, 0]
# 调用 `dfs` 函数,并返回 `p` 和 `q` 的距离
distance = dfs(root)[2]
return distance if distance != 0 else -1
结语
借助DFS算法的强大威力,我们成功地解决了LeetCode 1740:在二叉树中查找距离。掌握这项技术,你将拥有在算法领域更上一层楼的利器。