zoukankan      html  css  js  c++  java
  • 剑指 Offer 68

    思路:

     由于是二叉搜索树,很快想到了如果root大小位于p,q之间,则root为结果,否则pq位于同侧

    然后自然想到了递归

    class Solution {
        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            if((((p.val>=root.val)&&(root.val>=q.val)))||(((q.val>=root.val)&&(root.val>=p.val))))//pq位于两侧,直接返回root节点 等于情况
            {
                return root;
            }
    
            if(p.val>root.val)
            {return lowestCommonAncestor(root.right,p,q);}
            if(p.val<root.val)
            {return lowestCommonAncestor(root.left,p,q);}
    
            return root;
    
        }
    }

    但这个写得太复杂了,标准的这么写就行:

    class Solution {
        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            if(root.val < p.val && root.val < q.val)
                return lowestCommonAncestor(root.right, p, q);
            if(root.val > p.val && root.val > q.val)
                return lowestCommonAncestor(root.left, p, q);
            return root;
        }
    }

    接着看到解答,其实还有一种迭代的解法。递归的解法空间复杂度为On,迭代就不需要。

    class Solution {
        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            while(root != null) {
                if(root.val < p.val && root.val < q.val) // p,q 都在 root 的右子树中
                    root = root.right; // 遍历至右子节点
                else if(root.val > p.val && root.val > q.val) // p,q 都在 root 的左子树中
                    root = root.left; // 遍历至左子节点
                else break;
            }
            return root;
        }
    }

    以后在分析复杂度上还是要好好看一看

  • 相关阅读:
    Javascript进阶(7)---函数参数
    Django连接mssql(SqlServer)
    ORM查询
    Django-Model操作数据库
    Django去操作已经存在的数据库
    如何设置CentOS 7获取动态及静态IP地址
    nginx代理设置
    Django+Linux+Uwsgi+Nginx项目部署文档
    nginx的安装部署
    Django项目在linux系统中虚拟环境部署
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/14379201.html
Copyright © 2011-2022 走看看