二叉搜索树的最近公共祖先

第一种为通用一些的解法。

public int lowestCommonAncestor (TreeNode root, int p, int q) {
        // write code here
        TreeNode node=dfs(root,p,q);
        return node.val;
    }
    public TreeNode dfs(TreeNode root,int p,int q){
        if(root==null||root.val==p||root.val==q) return root;
        TreeNode left=dfs(root.left,p,q);
        TreeNode right=dfs(root.right,p,q);
        if(left==null) return right;
        if(right==null) return left;
        return root;
    }

第二种解法为利用二叉搜索树的性质。<q&&<p在左边>p&&>q在右边,在中间即为一大一小,直接返回即可。

public int lowestCommonAncestor (TreeNode root, int p, int q) {
        // write code here
      if(root.val<p&&root.val<q) return lowestCommonAncestor(root.right,p,q);
      if(root.val>p&&root.val>q) return lowestCommonAncestor(root.left,p,q);
      return root.val;
    }


全部评论

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务