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

问题

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

解决

//1、两次遍历
class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        TreeNode current=root;
        List p_path=reNodePath(current,p);
        List q_path=reNodePath(current,q);
        TreeNode now=null;
        int len1=Math.min(q_path.size(),p_path.size());
        for(int i=0;i reNodePath(TreeNode root,TreeNode targer){
        List path=new ArrayList();
        while(root!=targer){
            path.add(root);
            if(targer.val

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

//2、一次遍历:当便利到目标结点的时候,q、p一定在目标结点的两边
class Solution{
    public TreeNode lowestCommonAncestor(TreeNode root,TreeNode q,TreeNode p){
        TreeNode cur=root;
        while(true){
            if(q.valcur.val&&p.val>cur.val){
                cur=cur.right;
            }
            else{
                break;
            }
        }
        return cur;
    }
}

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

//3、递归
class Solution{
    public TreeNode lowestCommonAncestor(TreeNode root,TreeNode q,TreeNode p){
        if(q.valroot.val&&p.val>root.val) return lowestCommonAncestor(root.right,q,p);
        return root;
    }
}

时间复杂度:O(N)
空间复杂度:O(N)

总结:

  • 三种方法都是根据二叉搜索树的性质来,从路径出发找到最终结点。

Original: https://www.cnblogs.com/zhangsanM/p/16567991.html
Author: new_monkey
Title: 算法:二叉搜索树的最近公共祖先

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/605175/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 查找算法-插值查找算法

    插值查找算法 插值查找原理介绍: 插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找。 将折半查找中的求 mid 索引的公式 , low 表示左边索引 l…

    数据结构和算法 2023年6月12日
    066
  • 算法竞赛——二分图及应用

    二分图 二分图简介 定义: 简而言之,就是顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集,两个子集内的顶点不相邻。——百度百科 辨析示…

    数据结构和算法 2023年6月7日
    089
  • 图论基础

    图论基础 1.什么是”图” 这里我们说的图特指图论中的图,图是描述于一组对象的结构,由节点和边组成 比如,这就是一张(无向)图: 当然这其中还有很多分类 比…

    数据结构和算法 2023年6月8日
    0119
  • mybatis升级为mybatis-plus

    为了快速开发,需要把之前的老项目升级为mybatis-plus 步骤一:导入jar包 步骤二:删除mybatis-spring桥梁包 一定要删除之前与mybatis相关的包,否则可…

    数据结构和算法 2023年6月12日
    096
  • B. Navigation System【CF 1320】

    传送门 题目:简单理解就是,我们需要开车从s点到t点。车上有一个导航,如果当前点为x,则导航会自动为你提供一条从x到t的最短的路线(如果有多条,则随机选一条),每走到下一个点则会实…

    数据结构和算法 2023年6月7日
    093
  • 使用python操作excel

    使用python操作excel python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。 常用单元格中的数据类型 emp…

    数据结构和算法 2023年6月8日
    076
  • Java 中HashMap详解(含HashTable, ConcurrentHashMap)

    本篇重点: 1.HashMap的存储结构 2.HashMap的put和get操作过程 3.HashMap的扩容 4.关于transient关键字 5.HashMap, HashTa…

    数据结构和算法 2023年6月12日
    073
  • 透过 Chrome 深入理解浏览器导航过程

    网络的导航,是从输入 url 到最终获取到文件的过程。其中牵扯到浏览器架构、操作系统、网络等一系列知识。本文将从各个角度详细论述这一过程,涉及广度与深度。如果您是已经有一定基础的同…

    数据结构和算法 2023年6月12日
    0127
  • 扫描线

    #include #include #define ls now<#define rs now<#define ll long long using namespace…

    数据结构和算法 2023年6月7日
    090
  • CF1691D 题解

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据结构和算法 2023年6月12日
    076
  • 树-堆排序

    堆排序 堆排序基本介绍 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn),它也是不稳定排序。 堆是具有以下…

    数据结构和算法 2023年6月12日
    078
  • 【题解】[CQOI2015]网络吞吐量 最短路+最大流+拆点

    题目背景 路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点。网络中实现路由转发的硬件设备称为路由器。为了使数据包最快的到达目的地,路由器需…

    数据结构和算法 2023年6月12日
    073
  • [ubuntu18.04 python3.6] 清华源 CondaHTTPError: HTTP 000 CONNECTION

    问题 嫌官网源安装 jupyter notebook太慢,所以尝试修改为清华源,但每次在 Solving environment的时候就报错如下: 解决方法,修改conda配置信息…

    数据结构和算法 2023年6月16日
    0101
  • Python生成短uuid的方法

    python的uuid都是32位的,比较长,处理起来效率比较低, 本算法利用62个可打印字符,通过随机生成32位UUID,由于UUID都为十六进制,所以将UUID分成8组,每4个为…

    数据结构和算法 2023年6月16日
    0114
  • P1347 排序(拓扑排序)

    题目传送门:https://www.luogu.com.cn/problem/P1347 拓扑排序模板题,第一种情况是求这张图拓扑排序之后是否为n个点,也就是说,这张图必须无环,而…

    数据结构和算法 2023年6月8日
    082
  • 2019 第十届蓝桥杯大赛软件类省赛 Java A组 题解

    试题A ​ 题目最后一句贴心的提示选手应该使用 long (C/C++ 应该使用 long long)。 ​ 本题思路很直白,两重循环。外层循环 1 到 2019,内层循环检验是否…

    数据结构和算法 2023年6月7日
    070
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球