寻找二叉树的最近公共祖先

题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-cha-shu-de-zui-jin-gong-gong-zu-xian-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路 对于一个节点有三种情况:1.左右子树存在要找的节点,即本结点为最小公共祖先,返回本结点;2.本结点正好是p或q,返回本结点;3.左右子树有一个存在要找的结点,返回找到的结点。
代码

TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(!root) return NULL; TreeNode* l=lowestCommonAncestor(root->left, p,q); TreeNode* r=lowestCommonAncestor(root->right,p,q); if(l&&r) return root; if(root==p||root==q) return root; return l?l:r; }

【寻找二叉树的最近公共祖先】

    推荐阅读