236. 二叉树的最近公共祖先
private TreeNode ans = null;private int postOrder(TreeNode root, TreeNode p, TreeNode q) {if (root == null) {return 0;}//查看子结点的梳计个数int lcnt = postOrder(root.left, p, q);int rcnt = postOrder(root.right, p, q);//利用子结点返回的信息来进行处理//如果左边有一个,右边有一个,那么当前root就是最低公共祖先if (lcnt == 1 && rcnt == 1) {ans = root;} else if (lcnt == 1 || rcnt == 1) { // /如果左边找到一个,或者右边找到一个 // / 并且我等于其中某一个结点plq1 // /那么当前root就是最低公共祖先if (root == p || root == q) {ans = root;}}//返回值为以root为根的子树,统计里面的p,q结点的个数return lcnt + rcnt + ((root == p || root == q) ? 1 : 0);}public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {ans = null;postOrder(root, p, q);return ans;}