当前位置: 首页 > news >正文

236、二叉树的最近公共祖先

前提:

  • 所有 Node.val 互不相同 。
  • p != q
  • p 和 q 均存在于给定的二叉树中。

代码如下:

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (root == q || root == p || 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;if (left == NULL && right != NULL) return right;else if (left != NULL && right == NULL) return left;else  { //  (left == NULL && right == NULL)return NULL;}}
};

注意点:

  1. 求最小公共祖先,需要从底向上遍历,那么二叉树,只能通过后序遍历(即:回溯)实现从底向上的遍历方式。

  2. 在回溯的过程中,必然要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值(也就是代码中的left和right)做逻辑判断。

  3. 要理解如果返回值left为空,right不为空为什么要返回right,为什么可以用返回right传给上一层结果。

形象化表示就是从root节点开始派出左右两个侦察兵,先判断他们是不是目标值,如果不是就让他们各自在探查自己的左右两个侦察兵是不是,不是就接着递归,直到有一个找到了目标值,就将找到这个目标值的侦察兵的信息记录一层一层传递回来,若有一个节点的左右侦察兵同时接到了探查信息,就将这个节点逐级返回。

http://www.lryc.cn/news/389622.html

相关文章:

  • WebStorm 2024 for Mac JavaScript前端开发工具
  • 【Redis7】零基础篇
  • [ROS 系列学习教程] 建模与仿真 - 使用 ros_control 控制差速轮式机器人
  • Ubuntu22.04使用Systemd设置ROS 2开机自启动遇到的问题
  • AI安全研究滞后?清华专家团来支招
  • 12寸FAB 信息部内外工作职责的一些划分构思
  • css做旋转星球可举一反三
  • AcWing 1256:扩展二叉树
  • 三维家:SaaS的IT规模化降本之道|OceanBase 《DB大咖说》(十一)
  • ai智能语音机器人是如何影响客户体验的?电销机器人部署
  • vue3使用v-html实现文本关键词变色
  • C#面:举列 a=10,b=15,在不用第三方变量的前提下,把a,b的值互换
  • 编写动态库
  • 记一次阿里云服务器java应用无法响应且无法远程连接的问题排查
  • 雷池WAF+Modsecurity安装防护及系统加固
  • 【Python】已解决:SyntaxError: positional argument follows keyword argument
  • leetcode-20-回溯-切割、子集
  • 利用深度学习模型进行语音障碍自动评估
  • TP8 JS(html2canvas) 把DIV内容生成二维码并与背景图、文字组合生成分享海报
  • 计算机科学中的接口(Interface)介绍
  • 大创项目推荐 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉
  • 黑芝麻科技A1000简介
  • 详解C语言分支与循环语句
  • Python商务数据分析知识专栏(五)——Python数据分析的应用③使用Pandas进行数据预处理
  • Nosql期末复习
  • Pytest+Allure+Yaml+PyMsql+Jenkins+Gitlab接口自动化(四)Jenkins配置
  • SQL面试题练习 —— 查询前2大和前2小用户并有序拼接
  • Arthas常见使用姿势
  • Apache Kylin的入门学习
  • React@16.x(46)路由v5.x(11)源码(3)- 实现 Router