当前位置:网站首页>【LeetCode】235.二叉搜索树的最近公共祖先
【LeetCode】235.二叉搜索树的最近公共祖先
2022-08-05 06:36:00 【酥酥~】
题目
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 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 为不同节点且均存在于给定的二叉搜索树中。
题解
两次遍历,求路径并集,并集最后一个元素就是最近公共祖先
/** * 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:
void search(TreeNode* root,TreeNode* node,vector<TreeNode*> &myvec)
{
myvec.push_back(root);
if(root == node)
return;
search(node->val < root->val ? root->left : root->right,node,myvec);
}
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
vector<TreeNode*> vec1;
vector<TreeNode*> vec2;
search(root,p,vec1);//cout<<endl;
search(root,q,vec2);//cout<<endl;
vector<TreeNode*> result;
set_intersection(vec1.begin(),vec1.end(),vec2.begin(),vec2.end(),back_inserter(result));
// for(int i=0;i<result.size();i++)
// cout<< result[i]->val <<" ";
// cout<<endl;
return result.back();
}
};
一次遍历
在二叉搜索树中,左孩子结点一定小于祖先结点,右孩子结点一定大于祖先节点
当两个结点分别位于某节点左右子树时就是,该节点就是这两个结点的最近公共祖先结点
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
while(root)
{
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;
}
};
边栏推荐
猜你喜欢
随机推荐
Mysql master-slave delay reasons and solutions
Technical Analysis Mode (7) Playing the Gap
2022熔化焊接与热切割操作证考试题及模拟考试
IO process thread -> communication between processes -> day7
八大排序之快速排序
LaTeX Notes
Source code analysis of Nacos configuration service (full)
PCI Pharma Services Announces Multi-Million Dollar Expansion of UK Manufacturing Facility to Meet Growing Demand for Global High Potency Drug Manufacturing Services to Support Oncology Treatment
Linux中安装Redis教程
Redis
技术分析模式(九)三重顶部和底部
在STM32中使用printf函数
The NDK compiler so libraries
AH8669-AC380/VAC220V转降5V12V24V500MA内电源芯片IC方案
日本卫生设备行业协会:日本温水喷淋马桶座出货量达1亿套
技术分析模式(八)双顶和底
Kioxia and Aerospike Collaborate to Improve Database Application Performance
RNote108---Display the running progress of the R program
Promise (三) async/await
一天学会从抓包到接口测试,通过智慧物业项目深度解析