
C++实现二叉树的最近公共祖先
分析近似情况,明确底部情况。 采用后序节点攻击,共用父节点。 递归式逐步找到最近公共祖先节点。
发布日期:2021-05-20 07:54:59
浏览次数:12
分类:精选文章
本文共 827 字,大约阅读时间需要 2 分钟。
一、问题描述
找出两个给定树节点的最低公共祖先(即最近公共祖先)。首先明确,什么是“祖先”?在树结构中,任一节点的祖先是该节点到根节点的所有后续节点。最近公共祖先则是两个节点所在路径的最后一个相同的节点。
二、解决方案
解决此问题,采用后序遍历方法。后续遍历可以帮助从左右子树中依次探索,逐渐缩小范围,找到最近的公共祖先。
解决思路:
代码实现:
Solution::lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if (root == NULL || root == p || root == q) return root; TreeNode* left = lowestCommonAncestor(root->left, p, q); TreeNode* right = lowestCommonAncestor(root->right, p, q); if (left == NULL) return right; if (right == NULL) return left; return root;}
三、运行结果
如图所示,代码逻辑正确,能够符合预期运行结果。
四、大佬解析
代码采用递归策略,通过后序遍历找到最近公共祖先。从根节点开始,若当前节点是p或q,直接返回。如果左、右子树找到符合条件的节点,则返回较低的那一侧。若两边同时找到,说明当前节点即为最近公共祖先。这种方法保证了在树结构中准确地找到两节点的最近相连点。
这个方案通过递归实现,保持了树的纯度,逻辑简单易懂。若对时间复杂度有要求,可能需优化,但本题递归实现可满足需求。代码注释清晰,易于理解,保证可维护性。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月27日 16时56分58秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Vue.js学习-15-v-for循环数组内容
2019-03-17
Linux——系统安全及应用(开关机安全机制、系统弱口令检测、NMAP)
2019-03-17
kafka超时错误或者发送消息失败等错误,排错方式
2019-03-17
Python3 排序函数问题
2019-03-17
Windows下配置单机Hadoop环境 pyspark
2019-03-17
git教程之远程仓库
2019-03-17
Vue路由跳转如何传递一个对象过去?
2019-03-17
sockjs-node/info?t=1462183700002 报错解决方案
2019-03-17
FI 替代相关 OSS Note 要点记录
2019-03-17
蓝桥杯---试题 算法提高 欧拉函数(数学)
2019-03-17
【网络加速】TensorRT7-开发指南中文_Plus版【1】
2019-03-17
SaltStack about The Top File 使用知识介绍
2019-03-17
网络协议和支持(一)、uuid模块
2019-03-17
numpy.vstack
2019-03-17
numpy.frombuffer()
2019-03-17
文件结束符EOF
2019-03-17
Latex 错误集合
2019-03-17