当前位置:网站首页>Leetcode——236. 二叉树的最近公共祖先
Leetcode——236. 二叉树的最近公共祖先
2022-07-07 12:15:00 【styfish】
概述
分析
题目要求找树中等两个节点的最近公共祖先,容易想到应该从下往上查找,进而想到使用后序遍历
通过后序遍历,可以从树的下面开始遍历一个结点的左右子树,如果左右子树分别有指定的结点的话,则该节点一定是最低的公共祖先
因为后序一定是从下面开始的,如果左右子树中有指定结点的话,那么一定是第一次出现
思路
如何确定左右子树是否拥有指定的结点?
- 遍历过程中,判断遍历的节点是否和指定结点相同,如果相同,则返回该结点
代码
class Solution {
public:
// 4. 确定递归函数返回值
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
// 1. 确定递归函数
// 3. 确定终止条件。 如果节点==p、q则说明找到了;如果节点=nullptr,则遍历结束
if (root == p || root == q || root = nullptr) {
// 如果找到指定的节点 or 为空节点
return root;
}
// 1. 确定单层递归逻辑————后序遍历
TreeNode *lNode=lowestCommonAncestor(root -> left, p, q);
TreeNode *rNode=lowestCommonAncestor(root -> right, p, q);
// 2. 明确递归函数的作用
// lowestCommonAncestor的作用:判断在以root节点为根的子树中,是否拥有p、q指向的结点
if (lNode != nullptr && rNode != nullptr) // 如果在左右子树中,
return root;
else if(lNode == nullptr) {
//两个都在右子树
return rNode;
}
else {
//两个都在左子树里面
return lNode;
}
return nullptr;
}
};
边栏推荐
- Cesium 已知一点经纬度和距离求另一个点的经纬度
- How can the PC page call QQ for online chat?
- How to check the ram and ROM usage of MCU through Keil
- Beginner XML
- ES日志报错赏析-Limit of total fields
- TPG x AIDU | AI leading talent recruitment plan in progress!
- call undefined function openssl_ cipher_ iv_ length
- Interface automation test - solution of data dependency between interfaces
- [network security] SQL injection syntax summary
- Reverse non return to zero code, Manchester code and differential Manchester code of common digital signal coding
猜你喜欢
PERT图(工程网络图)
Vmware共享主机的有线网络IP地址
Verilog implementation of a simple legv8 processor [4] [explanation of basic knowledge and module design of single cycle implementation]
UML 状态图
Reverse non return to zero code, Manchester code and differential Manchester code of common digital signal coding
"New red flag Cup" desktop application creativity competition 2022
GVIM [III] [u vimrc configuration]
Parsing of XML files
常用数字信号编码之反向不归零码码、曼彻斯特编码、差分曼彻斯特编码
手把手教会:XML建模
随机推荐
Parsing of XML files
Codes de non - retour à zéro inversés, codes Manchester et codes Manchester différentiels couramment utilisés pour le codage des signaux numériques
常用數字信號編碼之反向不歸零碼碼、曼徹斯特編碼、差分曼徹斯特編碼
现在网上开户安全么?那么网上开户选哪个证券公司?
Cesium 已知一点经纬度和距离求另一个点的经纬度
Leetcode simple question sharing (20)
VSCode 配置使用 PyLint 语法检查器
Redis can only cache? Too out!
566. Reshaping the matrix
Mathématiques avancées - - chapitre 8 différenciation des fonctions multivariables 1
手把手教会:XML建模
【立体匹配论文阅读】【三】INTS
Clickhouse (03) how to install and deploy Clickhouse
参数关键字Final,Flags,Internal,映射关键字Internal
[high frequency interview questions] difficulty 2.5/5, simple combination of DFS trie template level application questions
Regular expression integer positive integer some basic expressions
使用day.js让时间 (显示为几分钟前 几小时前 几天前 几个月前 )
Selenium库
wpf dataGrid 实现单行某个数据变化 ui 界面随之响应
When FC connects to the database, do you have to use a custom domain name to access it outside?