leetcode 题目236
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {
if (root==NULL||root==p||root==q){
return root;
}
struct TreeNode* left = lowestCommonAncestor(root->left,p,q);
struct TreeNode* right = lowestCommonAncestor(root->right,p,q);
if (left && right){
return root;
}
if (left){
return left;
}
if (right){
return right;
}
else{
return NULL;
}
}
执行结果如下:
主要就是二叉树的递归思想,但这个代码是在看了一个博主代码之后写的,感觉他的思路清晰代码简洁,按照他的思路写结果最后代码就不可避免地一模一样了(因为真的一句废话都没有)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-cha-shu-de-zui-jin-gong-gong-zu-xian-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
大概思路就是先一路走到最左下然后把结果一点点往上返,如果没有就返null,有p就往上返p,有q就一直往上返q,直到一个root的两个子节点返回的分别是p和q时就说明最小公共祖先找到啦!
如果不理解的话可以提问,看到了会尽可能回复,就当作是一起讨论啦。