LeetCode 刷題 [C++] 第236題.二叉樹的最近公共祖先

題目描述

給定一個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。

百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個節點 p、q,最近公共祖先表示為一個節點 x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個節點也可以是它自己的祖先)。”

在這里插入圖片描述

題目分析

  1. 首先需要注意下提示信息:
    a. 二叉樹中所有節點中的值互不相同;
    b. p不等于q;
    c. p和q均存在于給定的二叉樹中。
  2. 根據題意可知,若node節點為p,q的最近公共祖先,則可能的情況如下:
    a. p 和 q分別在node的左右子樹中;
    b. p = node, 且q在node的左/右子樹中;
    c. q = node,且p在node的左/右子樹中。
  3. 從根節點開始遍歷,遞歸向左右子樹進行遍歷;
    a. 遞歸結束條件:當前查詢節點為null,或者當前節點為p或q,則返回當前節點
    b. 遞歸邏輯,結合2中的情況分析:
    遞歸遍歷當前節點的左右子樹,如果左右子樹返回的節點都不為空,則表明p和q分別在左右子樹中,即當前節點為最近公共祖先。
    如果左右子樹返回節點其中一個不為空,則返回非空節點。

Code

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (nullptr == root || p == root || q == root) {return root;}TreeNode* left = lowestCommonAncestor(root->left, p, q);TreeNode* right = lowestCommonAncestor(root->right, p , q);if (nullptr == left) {return right;}if (nullptr == right) {return left;}return root;}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711877.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711877.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711877.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大數據分析案例-基于SVM支持向量機算法構建手機價格分類預測模型

🤵?♂? 個人主頁:艾派森的個人主頁 ?🏻作者簡介:Python學習者 🐋 希望大家多多支持,我們一起進步!😄 如果文章對你有幫助的話, 歡迎評論 💬點贊&#x1f4…

矩陣爆破逆向之條件斷點的妙用

不知道你是否使用過IDA的條件斷點呢?在IDA進階使用中,它的很多功能都有大作用,比如:ida-trace來跟蹤調用流程。同時IDA的斷點功能也十分強大,配合IDA-python的輸出語句能夠大殺特殺! 那么本文就介紹一下這…

【JAVA】JDK內置工具之appletviewer

下載java 下載java的時候會先下載Java jdk,Java Development Kit Java開發工具包。 然后會下載jre,也就是Java Runtime Environment Java運行環境。什么是JDK、JRE?_java中的jdk,jre代表什么-CSDN博客 下載之后先找到java下的bin文件&#x…

yolov9 tensorRT 的 C++ 部署

yolov9 tensorRT C 部署 本示例中,包含完整的代碼、模型、測試圖片、測試結果。 完整的代碼、模型、測試圖片、測試結果【github參考鏈接】 TensorRT版本:TensorRT-7.1.3.4 導出onnx模型 導出適配本實例的onnx模型參考【yolov9 瑞芯微芯片rknn部署、地平…

網絡爬蟲的危害,如何有效的防止非法利用

近年來,不法分子利用“爬蟲”軟件收集公民隱私數據案件屢見不鮮。2023年8月23日,北京市高級人民法院召開北京法院侵犯公民個人信息犯罪案件審判情況新聞通報會,通報侵犯公民個人隱私信息案件審判情況,并發布典型案例。在這些典型案…

獲取PDF中的布局信息——如何獲取段落

PDF解析是極其復雜的問題。不可能靠一個工具解決全部問題,尤其是五花八門,格式不統一的PDF文件。除非有鈔能力。如果沒有那就看看可以分為哪些問題。 提取文本內容,提取表格內容,提取圖片。我認為這些應該是分開做的事情。python有…

百度百科數據爬取 python 詞條數據獲取

最近需要補充一些電力名詞的解釋,尤其是文字相關內容。百度百科上的詞條質量有差異,因此我們需要先手工選擇一些高質量詞條。 假設我們選擇了互感器頁面中的儀用變壓器詞條,首先: import requests from bs4 import BeautifulS…

DataSpell 2023:專注于數據,加速您的數據科學之旅 mac/win版

JetBrains DataSpell 2023是一款專為數據科學家和數據分析師設計的集成開發環境(IDE)。這款IDE提供了強大的數據分析和可視化工具,旨在幫助用戶更快速、更高效地進行數據科學工作。 DataSpell 2023軟件獲取 DataSpell 2023在保持其一貫的數…

【多線程】常見鎖策略詳解(面試常考題型)

目錄 🌴 樂觀鎖 vs 悲觀鎖🎍重量級鎖 vs 輕量級鎖🍀自旋鎖(Spin Lock)🎋公平鎖 vs ?公平鎖🌳可重?鎖 vs 不可重?鎖🎄讀寫鎖?相關面試題 常?的鎖策略 注意: 接下來講解的鎖策略不…

udp丟包問題研究

//發現udp 有收不到數據包現象. 一: 觀察丟包 1. ifconfig enp8s0 2. netstat -s -u 二: 修改系統緩存參數. recv_buffer_size 修改系統buffer_size sysctl -w net.core.rmem_max26214400 sysctl -w net.core.rmem_default26214400 三: 應用程序考慮 av_dict_set(&m_o…

cpp基礎學習筆記03:類型轉換

static_cast 靜態轉換 用于類層次結構中基類和派生類之間指針或者引用的轉換。up-casting (把派生類的指針或引用轉換成基類的指針或者引用表示)是安全的;down-casting(把基類指針或引用轉換成子類的指針或者引用)是不安全的。用于基本數據類型之間的轉換&#xff…

【C# 】進度條控件 ProgressBar 使用

進度條控件ProgressBar控件,一般作為UI界面表示某個事情進行到某個程度的外觀的體現。 那么進度條控件ProgressBar控件,在form中是怎么使用的呢? 該控件必須要用的屬性如下: private System.Windows.Forms.ProgressBar progressB…

Flutter Version Manager (FVM): Flutter的版本管理終極指南

Flutter筆記 Flutter Version Manager (FVM) - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/136300307 my-websit…

SQL-Labs靶場“26-28”關通關教程

君衍. 一、二十六關 基于GET過濾空格以及注釋報錯注入1、源碼分析2、繞過思路3、updatexml報錯注入 二、二十六a關 基于GET過濾空格注釋字符型注入1、源碼分析2、繞過思路3、時間盲注 三、二十七關 基于union及select的過濾單引號注入1、源碼分析2、繞過思路3、聯合查詢注入4、…

laravel cache

一、基本操作 Cache::put() 創建緩存(鍵,值,有效期(單位是秒)) Cache::get() 獲取緩存 Cache::add() 只會在緩存項不存在的情況下添加數據到緩存,如果數據被成功返回 true,否則&…

Android在后臺讀取UVC攝像頭的幀數據流并推送

Android在后臺讀取UVC攝像頭的幀數據流并推送 添加UvcCamera依賴庫 使用原版的 saki4510t/UVCCamera 在預覽過程中斷開可能會閃退,這里使用的是 jiangdongguo/AndroidUSBCamera 中修改的版本,下載到本地即可。 https://github.com/jiangdongguo/AndroidU…

Rust學習筆記:基礎工具和基本名詞

不要用共享內存來通信,要用通信來共享內存 rustup: 一個用于管理 Rust 版本和相關工具的命令行工具 rustup update cargo: Rust 的構建系統和包管理工具 構建代碼下載依賴庫并構建下載庫 crate: 代碼包/庫 trait: 特性、功能 ///: 生成 html 格式的 doc&#…

CELL文獻速遞 | 了解微生物如何在社會中傳播并塑造我們的健康

谷禾健康 當人還是嬰兒時,會從父母那里得到微生物;和寵物玩耍或接觸時,也會從寵物那得到微生物;有時候人沒有直接和動物玩耍,只是接觸動物的糞便,甚至其他環境的微生物,都會交換微生物... 這些其…

智慧治水丨計訊物聯水利RTU助推小型水庫出險加固工程建設與管理

日前,水利部印發《關于健全小型水庫除險加固和運行管護機制的意見》(以下簡稱《意見》),健全小型水庫除險加固和運行管護常態化機制,提高小型水庫安全管理水平。《意見》提出了“十四五”的兩大管理機制,通…

adb下載安裝及使用教程

adb下載安裝及使用教程 一、ADB的介紹1.ADB是什么?2.內容簡介3.ADB常用命令1. ADB查看設備2. ADB安裝軟件3. ADB卸載軟件4. ADB登錄設備shell5. ADB從電腦上發送文件到設備6. ADB從設備上下載文件到電腦7. ADB顯示幫助信息 4.為什么要用ADB 二、ADB的下載1.Windows版…