当前位置:网站首页>leetcode 二叉树的公共近祖先
leetcode 二叉树的公共近祖先
2022-08-09 18:52:00 【老鱼37】

思路:
遇到这个题目首先想的是要是能自底向上查找就好了,这样就可以找到公共祖先了。
那么二叉树如何可以自底向上查找呢?
回溯啊,二叉树回溯的过程就是从低到上。
后序遍历就是天然的回溯过程,最先处理的一定是叶子节点。
接下来就看如何判断一个节点是节点q和节点p的公共公共祖先呢。
如果找到一个节点,发现左子树出现结点p,右子树出现节点q,或者 左子树出现结点q,右子树出现节点p,那么该节点就是节点p和q的最近公共祖先。
使用后序遍历,回溯的过程,就是从低向上遍历节点,一旦发现如何这个条件的节点,就是最近公共节点了。
递归三部曲:
1.确定递归函数的返回值及其参数
2.确定递归终止条件
3.确定单层递归的逻辑
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(q==root||p==root||root==NULL) return root;
TreeNode*left=lowestCommonAncestor(root->left,p,q);//遍历左子树
TreeNode*right=lowestCommonAncestor(root->right,p,q);//遍历右子树
if(left!=NULL&&right!=NULL) return root;
else if(left!=NULL&&right==NULL) return left;
else if(right!=NULL&&left==NULL) return right;
else
{
return NULL;
}
}
};
总结:
1.求最小公共祖先,需要从底向上遍历,那么二叉树,只能通过后序遍历(即:回溯)实现从底向上的遍历方式。
2.在回溯的过程中,必然要遍历整颗二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值(也就是代码中的left和right)做逻辑判断。
3.要理解如果返回值left为空,right不为空为什么要返回right,为什么可以用返回right传给上一层结果。
如有错误,多多指教!
边栏推荐
猜你喜欢
![[免费专栏] Android安全之Android Fragment注入](/img/bf/244e7095ce010bfea799d02395b419.png)
[免费专栏] Android安全之Android Fragment注入

最新BEV感知基线 | 你确定需要激光雷达?(卡内基梅隆大学)

IS31FL3737B general 12 x 12 LED drive 40 QFN I2C 42 ma

这年头还不来尝试线稿图视频??
![[免费专栏] Android安全之和平精英(FZ)APK逆向分析](/img/22/a5129a310eec5ee1bf6f1cf90d05de.png)
[免费专栏] Android安全之和平精英(FZ)APK逆向分析

小满nestjs(第四章 前置知识装饰器-实现一个GET请求)

如何从800万数据中快速捞出自己想要的数据?

优秀的 Verilog/FPGA开源项目介绍(三十一)- OFDM
![[免费专栏] Android安全之ZIP文件目录遍历漏洞](/img/11/c9116562b0ce57205e73fc442874d3.png)
[免费专栏] Android安全之ZIP文件目录遍历漏洞

明明加了唯一索引,为什么还是产生重复数据?
随机推荐
[免费专栏] Android安全之静态方式逆向APK应用浅析【手动注入smali+】+【IDA Pro静态分析so文件】+【IDA Pro基础使用讲解】
OpenSSL SSL_read: Connection was reset, errno 10054
[免费专栏] Android安全之和平精英(FZ)APK逆向分析
Bi Sheng Compiler Optimization: Lazy Code Motion
重磅!上海985教授当选!全球仅4人!
基于CC2530 E18-MS1-PCB Zigbee DIY作品(二)
mysql duplicate data group multiple latest records
[免费专栏] Android安全之Android工程模式
《评估、创建和使用知识图谱的限制》2022最新230页博士论文,根特大学
为什么maxcompute的数据导入到mysql会乱码?mysql的表是udf8mb4的编码
MYSQL记录、自用
C#/VB.NET:从PowerPoint文档中提取文本和图片
请问一下flink cdc mysql source 报这种错怎么处理呢?我都设置了useSSL=f
C#/VB.NET: Extract text and pictures from PowerPoint document
新起之秀 DPU,正在掀起数据中心变革!
Abbkine TraKine Pro 活细胞微管染色试剂盒重要特色
[免费专栏] Android安全之Android应用的汉化功能(修改so中的字符串内容)
shell脚本编写 hash方法,shell中字符到ascii码或数字的转换
Paper sharing: "FED BN" uses the LOCAL BATCH NORMALIZATION method to solve the Non-iid problem
2022深圳(软考高级)信息系统项目管理师认证报名