查看: 1561| 回复: 7
跳转到指定楼层
上一主题 下一主题
收起左侧

LC 235和236的解法一样?Lowest Common Ancestor of a BST

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
一道是Lowest Common Ancestor of a BST, 另一道是Lowest Common Ancestor of a BT, 好像解法一样?另外大家在用分治算法的时候,通常是采用从下往上的方式,还是从上往下?

上一篇:【转 DS 打卡贴】自我监督
下一篇:请教一道刚面到的题string decompression
推荐
pxu 2018-6-11 10:47:13 | 只看该作者
全局:
BST和BT解法的共同点:都根据 if(root ==p || root == q || (rootVal < q.val && rootVal > p.val)) 判断最小公共节点
不同点:BST,根据root值和p,q的比较,决定是继续往左还是往右搜索,直接返回
BT,要搜索左右两棵子树,然后根据返回的值,觉得返回哪个节点。
附上我的具体代码,仅供参考
BST:
  1. public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
  2.         if(root == null){
  3.             return null;
  4.         }
  5.         
  6.         if(p.val > q.val){
  7.             return lowestCommonAncestor(root, q, p);
  8.         }
  9.         
  10.         int rootVal = root.val;
  11.         if(root ==p || root == q || (rootVal < q.val && rootVal > p.val)){
  12.             return root;
  13.         }else if(rootVal > q.val){
  14.             return lowestCommonAncestor(root.left, p, q);
  15.         }else{
  16.             return lowestCommonAncestor(root.right, p, q);
  17.         }
  18.         
  19.         
  20.     }
复制代码


BT:
  1. public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
  2.         if(root != null){
  3.             System.out.println(root.val);
  4.         }
  5.         if(root == null || root == p || root == q){
  6.             return root;
  7.         }
  8.         
  9.         TreeNode left = lowestCommonAncestor(root.left, p, q);
  10.         TreeNode right = lowestCommonAncestor(root.right, p, q);
  11.         
  12.         if(left != null && right != null){
  13.             System.out.println("Ok" + root.val);
  14.             return root;
  15.         }
  16.         
  17.         return left == null? right:left;
  18.     }
复制代码


评分

参与人数 1大米 +3 收起 理由
shuatizhe + 3 很有用的信息!

查看全部评分

回复

使用道具 举报

推荐
 楼主| shuatizhe 2018-6-13 10:45:48 | 只看该作者
全局:
我用的以下的代码,提交给两道题,都过了:

    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if (root == null || root == p || root == q) {
            return root;
        }
        
        TreeNode left = lowestCommonAncestor(root.left, p, q);
        TreeNode right = lowestCommonAncestor(root.right, p, q);
        
        if (left != null && right != null) {
            return root;
        }
        if (left != null) {
            return left;
        }
        if (right != null) {
            return right;
        }
        return null;
    }  
回复

使用道具 举报

全局:
235

  1.     public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
  2.         if(root == p) return p;
  3.         if(root == q) return q;
  4.         if(p.val <= root.val && root.val <= q.val || q.val <= root.val && root.val <= p.val) return root;
  5.         if(p.val <= root.val) return lowestCommonAncestor(root.left, p, q);
  6.         return lowestCommonAncestor(root.right, p, q);
  7.     }
复制代码
回复

使用道具 举报

无效楼层,该帖已经被删除
无效楼层,该帖已经被删除
无效楼层,该帖已经被删除
无效楼层,该帖已经被删除
无效楼层,该帖已经被删除
全局:
烦躁.. 所有回复都被审核了..
回复

使用道具 举报

全局:
解法还是不太一样的.. bst看值大小, 二叉树lca得走每一个点
235



236




补充内容 (2018-6-12 06:22):
235 236 弄翻了.. :P

评分

参与人数 1大米 +3 收起 理由
shuatizhe + 3 很有用的信息!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表