题目

题链:剑指 Offer 68 - I. 二叉搜索树的最近公共祖先

题解

官方题解:二叉搜索树的最近公共祖先

解法一:两次遍历
因为是一个二叉搜索树、所以可以很容易找到路径。通过记录两个节点的路径、找到分岔节点就是最近公共祖先。

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {List<TreeNode> pPath = getPath(root,p);List<TreeNode> qPath = getPath(root,q);TreeNode ans = null;for (int i = 0; i < pPath.size() && i<qPath.size(); i++) {if (pPath.get(i) == qPath.get(i)){ans = pPath.get(i);}else {break;}}return ans;}public List<TreeNode> getPath(TreeNode root,TreeNode target){List<TreeNode> res = new ArrayList<>();while (root != null){res.add(root);if (target.val  == root.val){break;}else if (target.val > root.val){root = root.right;}else {root = root.left;}}return res;}
}

解法二:一次遍历
通过直接判断当前结点是否满足同时大于这两个节点、或者同时满足小于这两个节点否者就是最分岔点。

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {TreeNode res = null;while (root != null){if (root.val > p.val && root.val > q.val){root = root.left;}else if (root.val < p.val && root.val < q.val){root = root.right;}else {res = root;break;}}return res;}
}

(day 52 - 二叉搜索树) 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先相关推荐

  1. 【LeetCode】剑指 Offer 68 - I. 二叉搜索树的最近公共祖先

    [LeetCode]剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 一.迭代 二.递归 祖先的定义 ...

  2. 【LeetCode笔记】剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(Java、二叉树、dfs)

    文章目录 思路 & 代码 代码 & 思路 二刷 思路 & 代码 应该在二叉树的最近公共祖先之前写= = 需要用到二叉搜索树的特性- 代码 & 思路 分成四种情况即可,具 ...

  3. 剑指 Offer II 055. 二叉搜索树迭代器

    链接:剑指 Offer II 055. 二叉搜索树迭代器 题解: /*** Definition for a binary tree node.* struct TreeNode {* int val ...

  4. LeetCode Algorithm 剑指 Offer II 056. 二叉搜索树中两个节点之和

    剑指 Offer II 056. 二叉搜索树中两个节点之和 Ideas 这题有点类似一个组合题,首先是通过二叉树遍历得到一个序列,然后再通过LeetCode Algorithm 1. 两数之和的方法查 ...

  5. 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先

    [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...

  6. 《剑指Offer》51. 二叉搜索树的第k个结点

    题目:51. 二叉搜索树的第k个结点 知识点:二叉搜索树 题目描述: 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为 ...

  7. 剑指offer:2.二维数组的查找(Java版)

    备注:本文参照<剑指offer第二版> 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数, 输入这样的一个二维数组和一个整数 ...

  8. 萌萌媛の【剑指offer笔记】二维数组中的查找

    题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整 ...

  9. 【前端js】实现剑指offer|leetcode(二)——数组题目集合

    文章目录 一.数组去重 1. 对排序数组去重(leetcode 26. 删除排序数组中的重复项) 2. 检查是否存在重复元素(leetcode 217. 存在重复元素) 3. 检查相邻k个元素是否存在 ...

  10. 【剑指offer题解】二维数组中的查找

    前言 众所周知,对于面试而言,<剑指offer>是一本"好书". 如果你和我一样是个算法菜鸡,那么最推荐的是先把剑指offer的题目搞明白,其次再去刷LeetCode等 ...

最新文章

  1. Unicode编码完全探究(三)之联通乱码
  2. 《spring实战第四版》的读书笔记
  3. [MATLAB学习笔记] global声明全部变量
  4. Delphi中点击DBGrid某一行获得其详细数据方法
  5. linq Distinct
  6. 第一周 从C走进C++ 008 函数缺省参数
  7. 用Python及深度学习实现iPhone X的FaceID功能
  8. 床位的摆放有五大禁忌
  9. uclinux 嵌入式linux,嵌入式操作系统uCLinux
  10. **角点检测(Harris)基于Opencv2.4.9版本+VS2012开发平台进行编**
  11. 梯度,散度,旋度的理解
  12. 25. PHP 文件处理
  13. 通信技术专业技术人员考试 动力与环境_中级通信工程师动力与环境考试大纲...
  14. Mathematic Paradigm
  15. canvas绘制图形的相关API
  16. 机械制图国家标准的绘图模板_JS制图:映射
  17. 坚果pro2刷回官方_坚果Pro2刷机教程刷TWRP面具详细步骤_软件开发_IT综合服务
  18. 中科大自主招生2018年笔试数学之四
  19. 一个JSP页面打开另外一个JSP页面并传值
  20. 1150 Travelling Salesman Problem (25 分)(分析题目,细节处理)

热门文章

  1. 根据服务端生成的WSDL文件创建客户端支持代码的三种方式
  2. 关于网上商城开发的随笔记录1
  3. [python]python 动态调用模块类方法
  4. linux定时备份Mysql
  5. 在线文件管理系统 下载地址
  6. JavaScript通用库(转)
  7. 4.PHP核心技术与最佳实践 --- 数据库(队列)
  8. 3. Magento 模板制作
  9. vue-cli webpack浅析
  10. [高中作文赏析]渴望从前