题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
解题思路:(1)在root的左子树和右子树同时找p和q,若p和q分别分布在root的左右子树,则root为所求。(2)若左子树返回NULL,则说明p和q都在右子树,则进入右子树做1。(3) 若右子树返回NULL,则说明p和q都在左子树,则进入左子树左1。
代码:
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) return right
;
if(right
==NULL) return left
;
return root
;
}
};
转载请注明原文地址:https://tech.qufami.com/read-2747.html