Solution to Lowest Common Ancestor of a Binary Tree problem.

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    
    TreeNode ans;
    
    public TreeNode lowestCommonAncestor(TreeNode currentNode, TreeNode p, TreeNode q) {
        findlca(currentNode, p, q);
        return ans;
    }
    
    private boolean findlca(TreeNode currentNode, TreeNode p, TreeNode q) {
        if(currentNode == null)
            return false;
        
        boolean self = (currentNode == p) || (currentNode == q);
        boolean left = findlca(currentNode.left, p, q);
        boolean right = findlca(currentNode.right, p, q);
        
        if ( (left && right) || (self && right) || (self && left) )
            ans = currentNode;
        
        return self || left || right;
    }
}