欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 236.二叉树的最近公共祖先

236.二叉树的最近公共祖先

2025/9/26 17:12:56 来源:https://blog.csdn.net/2401_88475903/article/details/148194456  浏览:    关键词:236.二叉树的最近公共祖先

       

        在树结构中,祖先指的是一个节点的父节点或更高层级的父节点。公共祖先是指同时为节点p和q的祖先的节点。最近公共祖先(LCA)则是指在所有公共祖先中,距离p和q最近的那个节点。寻找LCA的方法可以按以下情况进行分析:

  1. 当前节点为空节点
  2. 当前节点就是p节点
  3. 当前节点就是q节点
  4. 当前节点既不是p也不是q,且p和q位于其子树中:
    • p和q分别位于左右子树
    • p和q都在左子树
    • p和q都在右子树
    • p和q都不在子树中

具体解决方案如下:

情况1:空节点不可能是p和q的LCA。

情况2和3:如果当前节点是p或q,直接返回当前节点。因为若当前节点是p,而q是其子节点,则p就是LCA(节点可以是自身的LCA)。若q不在p的子树中,则无需继续在p的子树中搜索。

情况4.1:当前节点就是LCA。因为如果LCA在左子树,则不会是q的祖先;在右子树则不会是p的祖先;在上层节点则不满足"最近"的条件。

情况4.2:LCA必定在左子树中,因此递归搜索左子树。

情况4.3和4.4可以合并处理:若p和q都在右子树,则递归搜索右子树;若都不在子树中,则右子树也为空。        

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (!root || root == p || root == q) {return root;}TreeNode *left = lowestCommonAncestor(root->left,p,q);TreeNode *right = lowestCommonAncestor(root->right,p,q);if (left && right) {return root;}if (left) {return left;}return right;}
};

        时间复杂度:O(n),n为节点个数

        空间复杂度:O(n)

类似的可以求解一下235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词