两个节点的最近公共父节点
两个节点的最近公共父节点指的是在一棵树中,这两个节点所在的子树的根节点。如果这两个节点本身就是父子关系,则它们的父节点就是它们的最近公共父节点。
在一棵树中,由于每个节点都只有一个父节点,可以通过递归遍历树的方式找到两个节点的最近公共父节点。
具体实现步骤如下:
- 如果当前节点是 null 或者等于p或者q,则返回当前节点。
- 递归遍历当前节点的左子树,如果返回值不为 null,则说明在左子树中找到了p或q中的一个节点。
- 递归遍历当前节点的右子树,如果返回值不为 null,则说明在右子树中找到了p或q中的一个节点。
- 如果p和q分别在当前节点的左子树和右子树中,则当前节点就是它们的最近公共父节点。
代码实现如下:
class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if (root == null || root == p || root == q) { return root; } TreeNode left = lowestCommonAncestor(root.left, p, q); TreeNode right = lowestCommonAncestor(root.right, p, q); if (left != null && right != null) { return root; } return left != null ? left : right; } }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论