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

简介: LeetCode 235. 二叉搜索树的最近公共祖先

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

难度简单

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

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

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

image.gif 编辑

示例 1:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8

输出: 6

解释: 节点 2 和节点 8 的最近公共祖先是 6。

示例 2:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4

输出: 2

解释: 节点 2 和节点 4 的最近公共祖先是 2, 因为根据定义最近公共祖先节点可以为节点本身。

说明:

    • 所有节点的值都是唯一的。
    • p、q 为不同节点且均存在于给定的二叉搜索树中。


    思路:参考 力扣

    此题和 LeetCode:(236)剑指 Offer 68 - II. 二叉树的最近公共祖先_dreamer'~的博客-CSDN博客 类似,区别在于本题为二叉搜索树,其特性:root.Left.Val < root.Val < root.Right.Val


    时间复杂度:O(N)

    空间复杂度:O(1)

    /*** Definition for a binary tree node.* type TreeNode struct {*     Val   int*     Left  *TreeNode*     Right *TreeNode* }*/// 二叉搜索树 特性:root.Left.Val < root.Val < root.Right.ValfunclowestCommonAncestor(root, p, q*TreeNode) *TreeNode {
    // 方法1.1:迭代forroot!=nil {
    ifp.Val<root.Val&&q.Val<root.Val { // p、q都位于左子树中root=root.Left        } elseifp.Val>root.Val&&q.Val>root.Val { // p、q都位于右子树中root=root.Right        } else {
    returnroot        }
        }
    returnroot// 方法1.2:迭代// for {//     if p.Val < root.Val && q.Val < root.Val {//         root = root.Left//     } else if p.Val > root.Val && q.Val > root.Val {//         root = root.Right//     } else {//         return root//     }// }// 方法2 递归:// if p.Val < root.Val && q.Val < root.Val { // p、q都位于左子树中//     return lowestCommonAncestor(root.Left, p, q)// }// if p.Val > root.Val && q.Val > root.Val { // p、q都位于左子树中//     return lowestCommonAncestor(root.Right, p, q)// }// return root}

    image.gif


    目录
    相关文章
    |
    2月前
    【LeetCode 45】701.二叉搜索树中的插入操作
    【LeetCode 45】701.二叉搜索树中的插入操作
    10 1
    |
    2月前
    【LeetCode 44】235.二叉搜索树的最近公共祖先
    【LeetCode 44】235.二叉搜索树的最近公共祖先
    18 1
    |
    2月前
    【LeetCode 48】108.将有序数组转换为二叉搜索树
    【LeetCode 48】108.将有序数组转换为二叉搜索树
    40 0
    |
    2月前
    【LeetCode 47】669.修剪二叉搜索树
    【LeetCode 47】669.修剪二叉搜索树
    10 0
    |
    2月前
    【LeetCode 46】450.删除二叉搜索树的节点
    【LeetCode 46】450.删除二叉搜索树的节点
    19 0
    |
    2月前
    【LeetCode 43】236.二叉树的最近公共祖先
    【LeetCode 43】236.二叉树的最近公共祖先
    20 0
    |
    2月前
    【LeetCode 42】501.二叉搜索树中的众数
    【LeetCode 42】501.二叉搜索树中的众数
    10 0
    |
    3月前
    |
    Unix Shell Linux
    LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
    本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
    LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
    |
    4月前
    |
    Python
    【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
    本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
    59 6
    |
    4月前
    |
    搜索推荐 索引 Python
    【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
    本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
    121 2