递归
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
/**
* 递归终止条件
* 如果root就是其中之一,那么直接返回root;如果root为空,返回null
*/
if (root == null || root == p || root == q){
return root;
}
/**
* 分别在左右子树进行递归查找,如果为空说明在另一棵子树
* 都不为空时说明左右子树各有一个,那root就是公共祖先
*/
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right= lowestCommonAncestor(root.right, p, q);
if (left == null){
return right;
}
else if (right == null){
return left;
}
else {
return root;
}
}
}
/**
* 时间复杂度 O(n)
* 空间复杂度 O(n)
*/
https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/