IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 力扣235和236 二叉树的最近公共祖先问题 -> 正文阅读

[数据结构与算法]力扣235和236 二叉树的最近公共祖先问题

236. 二叉树的最近公共祖先 - 力扣(LeetCode)

  • 二叉树查找最近公共祖先

    • 普通二叉树从底向上查找,后续遍历是天然的回溯
    • 递归三部曲:
      • 1.确认递归函数返回值和参数
        • 需要返回是否是目标结点,首先考虑到返回布尔值;
        • 如果找到了目标结点也可以直接返回目标节点,则可以通过返回的结点是否为空来判断是否找到了目标结点。
        • 参数:下一个结点,目标结点1 ,目标结点2
      • 2.确认结束条件:
        • 若当前结点为空,则返回空;
        • 若当前结点不为目标结点,则返回空;
        • 若当前结点为目标结点,则返回该目标结点;
      • 确认单层递归逻辑(达到对应条件返回对应的值)
        • 根据每个左右结点的返回值进行判断
        • 1.左右结点返回值都不为空,则当前结点为最近公共祖先
        • 2.若左结点为空,右结点不为空,返回右结点值
        • 3.若右结点为空,左结点不为空,返回左结点值
        • 4.若都为空,则返回空

代码:

// 后续遍历是天然的回溯:从树的底层向上寻找
var lowestCommonAncestor = function (root, p, q) {
    // 使用递归的方法
    // 需要从下到上,所以使用后序遍历
    // 1. 确定递归的函数
    const travelTree = function (root, p, q) {
        // 2. 确定递归终止条件
        if (root === null || root === p || root === q) {
            return root;
        }
        // 3. 确定递归单层逻辑
        let left = travelTree(root.left, p, q);
        let right = travelTree(root.right, p, q);
        if (left != null && right != null) return root;
        if (left == null && right != null) {
            return right;
        } else if (left != null && right == null) {
            return left;
        } else { //  (left == null && right == null)
            return null;
        }
    }
    return travelTree(root, p, q);
};

?235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode)

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

    • 二叉搜索树是有序的,根结点的左子树都比根结点小,根结点的右子树都比根结点大
    • 利用二叉搜索树有序的特性,从上到下遍历二叉搜索树
    • 从上到下的遍历:因为本题是没有中间结点的处理逻辑的,所以采用哪种遍历顺序都无所谓
    • 通过当前结点的值是否在目标结点区间去判断该结点是否为最近公共祖先
      • 1.若当前结点的值比俩个目标结点的值都小,就要往右子树找
      • 2.若当前结点的值比俩个目标结点的值都大,就要往左子树找
      • 3.当前结点的值在俩个目标结点的中间,则该结点为最近公共祖先
      • 4.如果当前结点为空 返回空

代码:

var lowestCommonAncestor = function(root, p, q) {
    if(root === null) return root;
    if(root.val > p.val && root.val > q.val) {
        let left = lowestCommonAncestor(root.left, p, q);
        if(left!==null) {
            return left;
        }
    }
    if(root.val < p.val && root.val < q.val) {
        let right = lowestCommonAncestor(root.right, p, q);
        if(right!==null) {
            return right;
        }
    }
    return root;
};

?

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 23:13:18  更:2022-07-04 23:16:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:47:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码