二叉搜索树最近公共祖先二叉树最近公共祖先
什么是二叉搜索树?
对于二叉树的任意一个节点n:
(1)其左子树下的每个节点的值都小于节点n的值;
(2)其左子树下的每个节点的值都大于节点n的值;
思路与算法
从根节点开始遍历;
- 如果当前节点的值大于p和q的值,说明p和q应该在当前节点的左子树,应该将当前节点移动到它的左子节点;
- 如果当前节点的值小于p和q的值,说明p和q应该在当前节点的右子树,应该将当前节点移动到它的右子节点;
- 如果当前节点不满足上述两条条件,当前节点是分叉点,要么p和q在不同的树上,要么其中一个当前节点。
注意:这里的是二叉树,不是二叉搜素树。
分为以下几种情况:
- p=root,q在root的左子树或者右子树中;
- q=root,p在root的左子树或者右子树中;
- p和q都在root的子树中;
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = Noneclass Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':self.ans=TreeNode(0)def dfs(root,p,q):if not root:return Falselson=dfs(root.left,p,q)rson=dfs(root.right,p,q)if (lson and rson) or((lson or rson) or (root.val==p.val or root.val==q.val)):self.ans=rootreturn lson or rson or p.val==root.val or q.val==root.valdfs(root,p,q)return self.ans
定义了lson和rson两个参数来表明p或者q是否存在左右子树中
lson=dfs(root.left,p,q)rson=dfs(root.right,p,q)
如果lson或者rson都为True的话,那么当前节点就是最近公共祖先;如果root=q,且p在左右子树中,那么当前root就是要求的解;如果root=p,且q在左右子树中,那么当前root就是要求的解;
if (lson and rson) or((lson or rson) and (root.val==p.val or root.val==q.val)):self.ans=root
二叉搜索树最近公共祖先二叉树最近公共祖先相关推荐
- [leetcode] 96. 不同的二叉搜索树 +[补充] 不同的二叉树,不同形态的二叉树的个数----catalan数
leetcode官方的题解:https://leetcode-cn.com/problems/unique-binary-search-trees/solution/bu-tong-de-er-cha ...
- L2-004 这是二叉搜索树吗?(二叉树)
题目连接 https://pintia.cn/problem-sets/994805046380707840/problems/994805070971912192 视频讲解 https://www. ...
- [剑指offer]面试题第[68-1]题[Leedcode][JAVA][第235题][二叉搜索树的最近公共祖先][递归][BFS]
[问题描述][第235题][二叉搜索树的最近公共祖先][简单] 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p. ...
- pta 是否完全二叉搜索树_二叉树:构造一棵搜索树
给「代码随想录」一个星标吧! ❝ 构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指 ...
- 2021-10-11 二叉树,二叉搜索树及其相关23个操作 C++实现笔记(复习用,含C指针复习)
学数据结构到现在写的最久的一部分,简单总结一下这一周 1.考虑到未来考试要求,实现语言从java换成了C++,没想到意外的顺利 2.没别的了,干就完了 3.代码肯定有错误的地方,虽然我自认为是完美主义 ...
- C语言判断二叉树是否为二叉搜索树(附完整源码)
C语言判断二叉树是否为二叉搜索树 C语言判断二叉树是否为二叉搜索树完整源码(定义,实现,main函数测试) C语言判断二叉树是否为二叉搜索树完整源码(定义,实现,main函数测试) #include ...
- 判定一棵二叉树是否是二叉搜索树
问题 给定一棵二叉树,判定该二叉树是否是二叉搜索树(Binary Search Tree)? 解法1:暴力搜索 首先说明一下二叉树和二叉搜索树的区别.二叉树指这样的树结构,它的每个结点的孩子数目最多为 ...
- Suzy找到实习了吗 Day23 | 二叉树最后一节!669. 修剪二叉搜索树,108. 将有序数组转换为二叉搜索树,538. 把二叉搜索树转换为累加树
669. 修剪二叉搜索树 题目 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high.通过修剪二叉搜索树,使得所有节点的值在[low, high]中.修剪树 不应该 改变保 ...
- leetcode刷题记录--数据结构;深度优先搜索算法;二叉树;平衡树;1020. 飞地的数量;1669. 合并两个链表;108. 将有序数组转换为二叉搜索树
1020. 飞地的数量 难度中等131 给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格.1 表示一个陆地单元格. 一次 移动 是指从一个陆地单元格走到另一个相邻(上 ...
- C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划
C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...
最新文章
- Cinder 的 I/O QoS
- 我的Android进阶之旅------Android Studio 快捷键整理分享
- c语言键盘回调函数键盘的码,深入浅出剖析C语言函数指针与回调函数(三)
- 同构字符串(Isomorphic Strings)
- java图片上传被旋转,在其他大牛那看到的java手机图片上传旋转问题的解决方法...
- 无法连接iphone软件更新服务器_上海腾科教育今日分享——提示“无法连接到服务器”的解决办法...
- 【赠书】当深度学习遇上图: 图神经网络的兴起!
- Nvidia-Docker
- 【编程开发】 C与C++中的关于函数指针的强制类型转换与指针函数的关系
- FreeRTOS 教程指南 学习笔记 第四章 队列管理
- JAVA JSP网上订餐系统JSP餐厅点餐系统源码JSP点餐系统JSP网上订餐系统JSP在线订餐
- JDK全部版本高速下载,JDK1.8高速下载,JDK1.9、JDK10、JDK11、JDK12、JDK13、JDK14、JDK15下载
- 25个深度学习相关公开数据集
- cve_2019_0708复现踩坑
- 交大网院计算机第五次作业答案,2015交大网院计算机第三次作业word操作题
- 自定义notepad++ --添加插件SourceCookifier
- 写给海淘新手的 转运选择 攻略(2014最新版,10月13日更新)--转自什么值得买
- 简化 Spring 控制器:只须写接口即可
- app自动化测试appium教程之番外1——进阶补充内容
- 漫步者lollipods如何调节音量_漫步者LolliPods怎么配对双耳?如何切换单耳和双耳模式...
热门文章
- 数据库作业:SQL练习4 - SELECT(连接查询、嵌套查询)
- 加密交易所的新战场:高频交易
- c 抓取ajax异步数据,用requests.post提交表单抓取异步ajax信息失败
- LaTeX \genfrac 分式命令
- python直方图上加正态分布线_Python直方图绘制(与标准正态分布进行比较)
- linux怎么刷机教程,Ubuntu手机版来了 附刷机教程
- alertmanager 钉钉告警配置
- P问题、NP问题、NPC问题、NP难问题的概念[zz]
- 9个宝藏级的神奇网站!个个精品,让你人生开挂,效率翻倍
- 为什么rand()每次产生的随机数都一样