Leetcode刷题java之236. 二叉树的最近公共祖先

执行结果:

通过

显示详情

执行用时 :8 ms, 在所有 Java 提交中击败了99.64% 的用户

内存消耗 :38.5 MB, 在所有 Java 提交中击败了6.54%的用户

题目:

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

例如,给定如下二叉树:  root = [3,5,1,6,2,0,8,null,null,7,4]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

进行深度遍历,不光要左和右,还要右mid,因为,只有左和右的话,如果p和q的公共祖先是p或者q的话,就会错过这种情况,所以还要加一个mid,如果他们三个之中有两个为1,那么就找到了

代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    TreeNode result=null;
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        help(root,p,q);
        return result;
    }
    public boolean help(TreeNode root,TreeNode p,TreeNode q)
    {
        if(root==null)
        {
            return false;
        }
        int L=help(root.left,p,q)?1:0;
        int R=help(root.right,p,q)?1:0;
        int mid=(root==p||root==q)?1:0;
        if((L+R+mid>=2))
        {
            result=root;
        }
        return (L+R+mid>0);
    }
}
发布了481 篇原创文章 · 获赞 502 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/qq_41901915/article/details/104213654