首页 > 其他分享 >刷刷刷 Day 22 | 235. 二叉搜索树的最近公共祖先

刷刷刷 Day 22 | 235. 二叉搜索树的最近公共祖先

时间:2023-01-25 20:55:33浏览次数:59  
标签:节点 22 val 祖先 二叉 235 null root Day

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

LeetCode题目要求

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

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

例如,给定如下二叉搜索树:  root = [6,2,8,0,4,7,9,null,null,3,5]

图

示例

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
输出: 6 
解释: 节点 2 和节点 8 的最近公共祖先是 6。
解题思路

利用二叉树的特性,根据 p q 两个节点值来确定在左子树还是右子树。但无论如何他们的最近公共祖先再试 p q 之间的。
通过递归及二叉搜索树的特点,来判断 p q 位置,如果同时小于当前节点值,那么在左子树递归,如果同时大于当前节点值,那么在右子树递归。

上代码

class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {

        // 二叉搜索树的特性。确定 p q 的位置,在左侧 还是在 右侧

        // 确定终止条件
        if (root == null) {
            return null;
        }

        // 如果 p q 在左子树,
        if (root.val > p.val && root.val > q.val) {
            return lowestCommonAncestor(root.left, p, q);
        }

        // 如果 p q 在右子树
        if (root.val < p.val && root.val < q.val) {
            return lowestCommonAncestor(root.right, p, q);
        }

        return root;
    }
}
重难点

附:学习资料链接

标签:节点,22,val,祖先,二叉,235,null,root,Day
From: https://www.cnblogs.com/blacksonny/p/17067277.html

相关文章

  • springday5_数据层
    数据层解决方案SQL数据源持久化数据库NoSQLRedisMongo1.导入坐标2.添加配置ES......
  • 2022前端年底面试总结
    又到年底了,很多小伙伴又开始​​跳槽​​​了,本次汇总都是​​面试真题​​​,来自各位小伙伴有​​大厂​​​也有​​小厂​​​,还有​​外包​​可以说很全面了。某外包公......
  • 刷刷刷 Day 21 | 236. 二叉树的最近公共祖先
    236.二叉树的最近公共祖先LeetCode题目要求给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个节点p、q,......
  • C++Day09 深拷贝、写时复制(cow)、短字符串优化
    一、std::string的底层实现1、深拷贝1classString{2public:3String(constString&rhs):m_pstr(newchar[strlen(rhs)+1]()){4}5private:6cha......
  • USACO2022 OPEN【杂题】
    A.[USACO22OPEN]262144RevisitedP对于一个长为\(m\)的序列\(b\),如下定义其权值:对其进行\(m-1\)次操作,每次选择相邻的两个数合并,合并后将其替换为一个大于两数最......
  • day11
    1、leetcode20有效的括号思路不匹配的情况括号个数不匹配若字符串长度为奇数,则直接返回flase左括号多余遍历完字符串,但栈不为空,说明存在有左括号无右括号进行......
  • 刷刷刷 Day 21 | 501. 二叉搜索树中的众数
    501.二叉搜索树中的众数LeetCode题目要求给你一个含重复值的二叉搜索树(BST)的根节点root,找出并返回BST中的所有众数(即,出现频率最高的元素)。如果树中有不止一个众数......
  • Day15 - Http协议和静态服务器
    1.http介绍HTTP协议的介绍HTTP协议的全称是(HyperTextTransferProtocol),翻译过来就是超文本传输协议。超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:......
  • Day14 - 网络编程
    1.IP地址IP地址的概念IP地址就是标识网络中设备的一个地址,好比现实生活中的家庭地址。网络中的设备效果图:IP地址的表现形式说明:IP地址分为两类:IPv4......
  • Day13 - 多任务编程【线程】
    1.线程介绍线程也是实现多任务的一种方式一个程序在执行时会对应一个主进程,主进程中会有一个主线程通过主线程手动产生的线程称为子线程进程是最小资源分配单位线程......