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

力扣第236题——二叉树的最近公共祖先 (C语言题解)

题目描述

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

示例 1:

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出:3
解释:节点 5 和节点 1 的最近公共祖先是节点 3 

示例 2:

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
输出:5
解释:节点 5 和节点 4 的最近公共祖先是节点 5 因为根据定义最近公共祖先节点可以为节点本身。

示例 3:

输入:root = [1,2], p = 1, q = 2
输出:1

提示:

  • 树中节点数目在范围 [2, 105] 内。
  • -109 <= Node.val <= 109
  • 所有 Node.val 互不相同 。
  • p != q
  • p 和 q 均存在于给定的二叉树中。

 C语言递归算法

这道题的递归算法并不好理解,需要结合讲解和代码结合着多理解几遍。
1、如果root等于p或q,说明root本身就是最近公共祖先,直接返回
2、如果root为NULL则说明到了叶子节点,直接返回
3、分别查询左节点和右节点是否能够查到p或q
若p左q右,或p右q左,说明root就是最近公共祖先
若都在一边,那么只要继续查这一边就可以了

struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {if (root == NULL || root == p || root == q) return root;struct TreeNode *left = lowestCommonAncestor(root->left, p, q);struct TreeNode *right = lowestCommonAncestor(root->right, p, q);if (left == NULL) return right;if (right == NULL) return left;return root;
}

力扣题目网址:力扣——全球极客挚爱的技术成长平台

萌新不定期在互联网上随地乱丢一些赛博垃圾,还望拨冗批评斧正~

相关文章:

  • shell编程-3
  • [Python] scikit-learn之mean_squared_error函数(Mean Squared Error(MSE))介绍和使用案例
  • 设计模式——观察者模式
  • Python进程池multiprocessing.Pool
  • Spring第七天(AOP)
  • Red Hat Enterprise Linux 9.3 安装图解
  • docker 使用 vcs/2018 Verdi等 eda 软件
  • python爬虫案例分享
  • 力扣每日一练(24-1-18)
  • 如何用ArcGIS制作城市用地适应性评价
  • C语言辨析——int a=5;为什么++a=1能编译通过而a++=1不行呢?
  • 在 Python 中实现语音合成的四种方法
  • js监听返回当前页面的方法
  • HCIP-BGP实验3
  • Mysql中的日志系统
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【前端学习】-粗谈选择器
  • flask接收请求并推入栈
  • IndexedDB
  • JavaScript DOM 10 - 滚动
  • jdbc就是这么简单
  • nginx 配置多 域名 + 多 https
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • windows下mongoDB的环境配置
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 给第三方使用接口的 URL 签名实现
  • 判断客户端类型,Android,iOS,PC
  • 扑朔迷离的属性和特性【彻底弄清】
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 实现菜单下拉伸展折叠效果demo
  • 使用parted解决大于2T的磁盘分区
  • 手机端车牌号码键盘的vue组件
  • 详解NodeJs流之一
  • 因为阿里,他们成了“杭漂”
  • 用jQuery怎么做到前后端分离
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 追踪解析 FutureTask 源码
  • 自制字幕遮挡器
  • ​flutter 代码混淆
  • ​io --- 处理流的核心工具​
  • #QT(串口助手-界面)
  • #前后端分离# 头条发布系统
  • (4)logging(日志模块)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Ruby)Ubuntu12.04安装Rails环境
  • (SpringBoot)第七章:SpringBoot日志文件
  • (转)fock函数详解
  • (转)iOS字体
  • ***监测系统的构建(chkrootkit )
  • ./configure,make,make install的作用(转)
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .Family_物联网
  • .net程序集学习心得
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)