返回的值为找没找到, 如果找到了就返回这个节点
先序和后续的结合
前序部分定义找没找到数 找到就返回该节点

后续部分用于判断找到的结果
如果当前的节点返回一侧为空,说明该部分没有找到,
则返回当前节点 因为是后序遍历 所以会返回最先找到的节点。

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @param o1 int整型 
     * @param o2 int整型 
     * @return int整型
     */
    public int lowestCommonAncestor (TreeNode root, int p, int q) {
        TreeNode res = LCA(root,p,q);
        return res.val;
    }

    public TreeNode LCA(TreeNode root, int p, int q){
        if(root ==null) return null;
        if(root.val == p || root.val == q) return root;

        TreeNode a = LCA(root.left,p,q);
        TreeNode b = LCA(root.right,p,q);

        if(a == null) return b;
        else if (b == null) return a;
        else return root;
    }

}