BST基本性质,LeetCode 235. 二叉搜索树的最近公共祖先

一、题目

1、题目描述

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

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

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

2、接口描述

复制代码
cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        
    }
};

3、原题链接

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


二、解题报告

1、思路分析

对于二叉搜索树中节点p和q的lca显然满足值在p和q的值之间或者等于任意值

那么当大于p和q的值时,往左子树走

小于时,往右子树走

2、复杂度

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

3、代码详解

复制代码
cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        while(1){
            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 break;
        }
        return root;
    }
};
相关推荐
我是一只小青蛙8889 分钟前
Windows下MATLAB与C++混合编程实战
c++
zhuqiyua11 分钟前
【无标题】
算法
玖釉-26 分钟前
[Vulkan 学习之路] 11 - 组装流水线:固定功能阶段 (Fixed Functions)
c++·windows·图形渲染
f狐0狸x33 分钟前
【C++修炼之路】C++string的用法
开发语言·c++·string
阿豪只会阿巴37 分钟前
【多喝热水系列】从零开始的ROS2之旅——Day9 初识话题通信:基本命令
c++·笔记·python·ubuntu·ros2
Xの哲學37 分钟前
Linux Tasklet 深度剖析: 从设计思想到底层实现
linux·网络·算法·架构·边缘计算
Imxyk1 小时前
力扣:1553. 吃掉 N 个橘子的最少天数(记忆化搜索,Dijkstra解法)
算法
爱编码的傅同学1 小时前
【今日算法】Leetcode 581.最短无序连续子数组 和 42.接雨水
数据结构·算法·leetcode
码小猿的CPP工坊1 小时前
C++弱引用智能指针std::weak_ptr使用介绍
开发语言·c++
Σίσυφος19001 小时前
线性与非线性 、齐次非齐次
算法