一、题目
二、代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution
{
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q)
{
//后序遍历就是自底向上
//找到->汇聚
if(root == null) return root;
if(root == p || root ==q) return root; //单次寻找
TreeNode left = lowestCommonAncestor(root.left,p,q);
TreeNode right = lowestCommonAncestor(root.right,p,q);
if(left==null&&right==null) return null;
else if(left!=null&&right==null) return left;
else if(left==null&&right!=null) return right;
else
{
return root;
}
}
}
三、运行结果
四、附录
二刷
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution
{
//二叉树的大小属性 可以充分利用 可以按顺序速查
TreeNode res = null;
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q)
{
if(res!=null) return null;
if(root == null) return null;
int max = Math.max(p.val,q.val);
int min = Math.min(p.val,q.val);
if(root.val>max&&root.left!=null) lowestCommonAncestor(root.left,p,q);
if(root.val<min&&root.right!=null) lowestCommonAncestor(root.right,p,q);
if(root.val>=min&&root.val<=max ) res = root;
return res;
}
}