📜  门| GATE-CS-2005 |第 34 题(1)

📅  最后修改于: 2023-12-03 15:12:41.049000             🧑  作者: Mango

GATE-CS-2005 | 第34题介绍

这是一道关于数据结构的算法题,题目如下:

给定一棵根节点为r的二叉树和节点p、q,找出p和q的最近公共祖先节点。

这道题需要通过递归的方法实现,具体实现方式可以参考下面的代码片段。

算法思路
  1. 如果根节点为null,则返回null。
  2. 如果根节点等于p或者q,则直接返回根节点。
  3. 递归处理左右子树,分别找出p和q的最近公共祖先节点。
  4. 如果p和q分别在左右子树中,则返回根节点。
  5. 如果只在一侧,则返回那侧的最近公共祖先节点。
代码实现
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;
}
结束语

这道题需要掌握二叉树的基本概念和递归算法的实现方式。在实际的开发过程中,可能还需要根据不同的业务需求进行不同的优化和调整。