当前位置:网站首页>235. 二叉搜索树的最近公共祖先(Easy)
235. 二叉搜索树的最近公共祖先(Easy)
2022-04-22 07:43:00 【weixin_46272577】
235. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]

示例 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 为不同节点且均存在于给定的二叉搜索树中。
思路
利用二叉搜索树的特性,我么可以根据值和目标值的大小作对比,找到从根节点到目标节点的路径,将路径存入vector中。然后一一对比两个vector中的元素,最后一个相等的即为最深的公共祖先节点
源代码
class Solution {
public:
void search_path(TreeNode* root, TreeNode* target, vector<TreeNode*> &v) {
if (root == nullptr) {
return;
}
v.push_back(root);// 先将最开始的根节点入路径
while (root != target) {
// 未找到目标节点
if (root->val < target->val) {
// 小于目标节点,右边找
root = root->right;
}
else {
// 大于目标节点,左边找
root = root->left;
}
v.push_back(root);// 记录将走过的路径
}
}
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
vector<TreeNode*> pv;// 储存找到p的路径
vector<TreeNode*> qv;// 储存找到q的路径
search_path(root, p, pv);
search_path(root, q, qv);
TreeNode* ancestor;// 最近的祖先节点
for (int i=0; i<pv.size() && i<qv.size(); i++) {
// 顺着道路找,前面两个走的路线一样,找最近的分岔口
if (pv[i] == qv[i]) {
// 每一次对比找到相等的,就赋值,最后不赋值了,得到的就是最深的公共祖先节点
ancestor = pv[i];
}
}
return ancestor;
}
};
版权声明
本文为[weixin_46272577]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_46272577/article/details/117937176
边栏推荐
- kubernetes—pod详解
- sonic云真机入门教程
- Probability theory note 6.3 sampling distribution
- nacos基础(1):什么是配置中心&Nacos介绍
- CPU的基本工作流程
- Fresco简单的使用—SimpleDraweeView
- 只有服务器,没有域名,怎么部署网站?
- 【论文阅读】【3d目标检测】pvgnet
- 7-34 delete duplicate characters (set usage) & 7-35 count the number of characters (unordered_map)
- Lanthanum aluminate LaAlO3 crystal substrate | silicon Si crystal substrate | iron doped strontium titanate Fe: SrTiO3 crystal substrate | strontium niobate NB: SrTiO3 crystal substrate | Qiyue suppli
猜你喜欢

58 Technology Salon issue 28 - anjuke quality assurance system Salon

Leetcode 111 Balanced binary tree (2022.04.21)

CAS: 36530-06-0 boron chloride phthalocyanine | phthalocyanine | boron chloride phthalocyanine | dichloroboron phthalocyanine dye | boron chloride phthalocyanine | boronsubphalocyaninichloride

sonic云真机入门教程

Click, walk and move of characters in 3D sandbox game

【无极低码】低代码平台开发日记,低代码平台之sql编程

ospf四类,五类和七类LSA详解

Anhydrous glucose CAS: 50-99-7 D (+) - glucose molecular weight: 180.156 molecular formula: C6H12O6 density and boiling point value
![[quick link] a necessary calculation tool for Electronic Engineers - square wave circuit aided design form](/img/64/7c857ed94047f2a7b1d7be6d35e3b7.png)
[quick link] a necessary calculation tool for Electronic Engineers - square wave circuit aided design form

The starting point of the final end of the 15th day of the sprint to the big factory
随机推荐
Use the method of onlayoutchangelistener to solve the problem of gettop = 0
Fluorescently labeled hyaluronic acid
反转一个链表<难度系数>
使⽤airtestIDE⽣成脚本,使⽤脚本运⾏
手把手教你实现RecyclerView的下拉刷新和上拉加载更多
The industrialization of SCRM has accelerated, and the manufacturing industry has begun to play with private traffic
Redefine China's "core"
Should everyone use OKR?
oh-my-notepro
用OnLayoutChangeListener的方法解决getTop=0的问题
Flutter基础
地图裁剪器,可以将图片裁剪成瓦片数据,主要用途是将高清卫星图像裁剪成瓦片图,可以做离线地图的开发,基于墨卡托坐标
MySQL深入学习(三二):数据库其它调优策略
sql需求处理篇-统计指定某年中有多少个周一至周日
Redis非关系型数据库—Redis高可用、持久化及性能管理
Airtest installation and introduction
58 Technology Salon issue 28 - anjuke quality assurance system Salon
Layer1扩容:分片和可组合性
如何用c语言实现【猜数字游戏】
shell脚本学习笔记—循环语句