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

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

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;
    }


全部评论

相关推荐

06-20 21:22
已编辑
门头沟学院 Java
纯真的河老师在喝茶:答应了就跑啊,实习随便跑啊,别被pua了,md就是找个廉价劳动力,还平稳过度正式工,到时候跟你说没转正
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务