/** * 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 || root == p || root == q) return root; TreeNode leftNode = lowestCommonAncestor(root.left,p,q); TreeNode rightNode = lowestCommonAncestor(root.right,p,q); //1、root 的 左右子树都不包含p、q,返回null if(leftNode == null && rightNode == null) return null; //2、p、q分列 root的左、右子树中。因此root是最近公共祖先,返回root if(leftNode != null && rightNode != null) return root;//多余了 //3、左子树为空,右子树不为空,说明p、q都在右子树中,返回right if(leftNode == null && rightNode != null) return rightNode; // if(leftNode == null) return rightNode; //4、同3 if(leftNode != null && rightNode == null) return leftNode; // if(rightNode == null) return leftNode; return root; } }