算法-二叉樹篇22-二叉搜索樹的最近公共祖先

二叉搜索樹的最近公共祖先

力扣題目鏈接

題目描述

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

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

解題思路

這道題完全可以套上一題的答案,所以這里我就寫了一個更加體現出二叉搜索樹的答案。
感興趣的可以看上一題算法-二叉樹篇21-二叉樹的最近公共祖先

大致步驟如下:

  • 首先確定借助二叉搜索樹的特性來解決,那么我們需要一個尋找目標節點的方法,這方法傳入根節點和目標節點;
  • 然后根據目標節點和根節點的大小關系向下遍歷,直到尋找到該節點;
  • 在尋找的過程中,把遍歷過的節點存入隊列中,然后返回;
  • 主函數中,我們得到了兩個節點的路徑隊列,然后尋找兩個隊列最后一個相等的節點,就是答案。

題解

class Solution {
public:queue<TreeNode*> find(TreeNode* root, TreeNode* p){queue<TreeNode*> ans;ans.push(root);TreeNode* cur = root;while(cur != p){if(cur->val > p->val){cur = cur->left;}else {cur = cur->right;}ans.push(cur);}return ans;}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {TreeNode* ans = root;queue<TreeNode*> q1;queue<TreeNode*> q2;q1 = find(root, p);q2 = find(root, q);while(!q1.empty() && !q2.empty()){if(q1.front() == q2.front()){ans = q1.front();q1.pop();q2.pop();}else {break;}}return ans;}
};

總結

這種公共祖先的題目,主要還是需要目標節點的路徑,但是對于上一條來說,因為我們不知道目標節點的位置,如果存儲下所有路徑會占用很多內存,所以我們是采用遞歸的方式去反向遍歷確定答案。這道題由于我們可以知道尋找目標節點的正確路徑,所以我們可以直接存下該路徑,減少了程序運行時不必要的時間開銷。

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

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

相關文章

細說STM32F407單片機RS485收發通信實例及調試方法

目錄 一、硬件配置 1、RCC、DEBUG、CodeGenerator 2、USART3 3、 RS485_DIR 4、NVIC 二、軟件設計 1、RS485的收發控制 2、main.c 三、運行調試 1、修改RS485_DIR為SET后需要延遲 2、向串口助手發送的數據不能太長 MCU上的串口UART&#xff08;USART&#xff09;是…

PDF工具 Candy Desktop(安卓)

PDF Candy Desktop&#xff08;安卓&#xff09; 今天給大家分享一個電腦端的PDF工具&#xff0c;里面的功能很多&#xff0c;主要涉及PDF編輯、轉換等&#xff0c;不僅超級好用&#xff0c;而且免費&#xff01;剩下就不說了&#xff0c;兄弟們自行下載體驗吧&#xff01; 「…

基于javaweb的SSM+Maven幼兒園管理系統設計和實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論…

golang安裝(1.23.6)

1&#xff0e;切換到安裝目錄 cd /usr/local 2&#xff0e;下載安裝包 wget https://go.dev/dl/go1.23.6.linux-amd64.tar.gz 3&#xff0e;解壓安裝包 sudo tar -C /usr/local -xzf go1.23.6.linux-amd64.tar.gz 4&#xff0e;配置環境變量 vi /etc/profile export PATH$…

【新手入門】SQL注入之盲注

一、引言 在我們的注入語句被帶入數據庫查詢但卻什么都沒有返回的情況我們該怎么辦? 例如應用程序返回到一個"通用的"的頁面&#xff0c;或者重定向一個通用頁面(可能為網站首頁)。這時&#xff0c;我們之前學習的SQL注入的辦法就無法使用了。這種情況我們稱之為無…

2024年12月中國電子學會青少年軟件編程(Python)等級考試試卷(六級)答案 + 解析

青少年軟件編程(Python)等級考試試卷(六級) ↓↓↓↓↓↓ 真題模擬測試 分數:100 題數:38 一、單選題(共25題,共50分) 下面代碼的輸出結果正確的是?( )import json json_str =’ [ “Alice”, “girl", 17,“New York”]’ data = json.loads(json_str) prin…

wordpress按不同頁調用不同的標題3種形式

在WordPress中&#xff0c;可以通過多種方式根據不同的頁面調用不同的標題。這通常用于實現SEO優化、自定義頁面標題或根據頁面類型顯示不同的標題內容。 使用wp_title函數 wp_title函數用于在HTML的title標簽中輸出頁面標題。你可以通過修改主題的header.php文件來實現自定義…

DeepSeek-R1 大模型實戰:騰訊云 HAI 平臺 3 分鐘極速部署指南

引言&#xff1a;為什么選擇 DeepSeek-R1&#xff1f; 近期&#xff0c;國產大模型 DeepSeek-R1 因其低成本、高性能的特點在全球 AI 領域引發熱議。根據 Sensor Tower 數據&#xff0c;其發布僅 18 天便斬獲 1600 萬次下載量&#xff0c;遠超 ChatGPT 同期表現。而騰訊云推出…

【Pytest】setup和teardown的四個級別

文章目錄 1.setup和teardown簡介2.模塊級別的 setup 和 teardown3.函數級別的 setup 和 teardown4.方法級別的 setup 和 teardown5.類級別的 setup 和 teardown 1.setup和teardown簡介 在 pytest 中&#xff0c;setup 和 teardown 用于在測試用例執行前后執行一些準備和清理操…

使用Docker將ros1自定義消息通過rosjava_bootstrap生成jar包

文章目錄 預準備環境rosjava_bootstrap壞消息好消息 環境安裝docker安裝rosjava_bootstrap倉庫rosjava_center倉庫修改rosjava_bootstrap代碼拉取docker鏡像放置自己的自定義消息 啟動docker編譯 預準備環境 rosjava_bootstrap rosjava_bootstrap是將自定義的ROS消息生成java…

《Python實戰進階》No 7: 一個AI大模型聊天室的構建-基于WebSocket 實時通信開發實戰

第7集&#xff1a; 一個AI大模型聊天室的構建-基于WebSocket 實時通信開發實戰 在現代 Web 開發中&#xff0c;實時通信已經成為許多應用的核心需求。無論是聊天應用、股票行情推送&#xff0c;還是多人協作工具&#xff0c;WebSocket 都是實現高效實時通信的最佳選擇之一。本…

輪式機器人在復雜地形中如何選擇合適的全局路徑規劃算法?

已思考完成 收起 嗯&#xff0c;用戶問的是輪式機器人在復雜地形中如何選擇合適的全局路徑規劃算法。首先&#xff0c;我需要理解復雜地形可能帶來的挑戰&#xff0c;比如崎嶇的路面、動態障礙物、非結構化環境等等。輪式機器人在這里的運動控制需要考慮地形通過性、穩定性&…

Mysql100道高頻面試題

一、基礎概念 1. 什么是數據庫&#xff1f;DBMS的作用是什么&#xff1f; 數據庫&#xff1a;是按照數據結構來組織、存儲和管理數據的倉庫。它允許用戶高效地訪問和管理數據。 DBMS&#xff08;數據庫管理系統&#xff09;&#xff1a;是一種軟件系統&#xff0c;用于創建和…

React底層原理詳解

React中Element&Fiber對象、WorkInProgress雙緩存、Reconcile&Render&Commit、第一次掛載過程詳解 在面試中介紹React底層原理時&#xff0c;需遵循邏輯清晰、層次分明、重點突出的原則&#xff0c;結合技術深度與實際應用場景。以下是結構化回答模板&#xff1a;…

qt5的中文亂碼問題,QString、QStringLiteral 為 UTF-16 編碼

qt5的中文亂碼問題一直沒有很明確的處理方案。 今天處理進程間通信時&#xff0c;也遇到了qt5亂碼問題&#xff0c;一邊是設置的GBK&#xff0c;一邊設置的是UTF8&#xff0c;單向通信約定采用UTF8。 發送端保證發的是UTF8字符串&#xff0c;因為UTF8在網絡數據包中沒有字節序…

解鎖瀏覽器內置API,助力跨標簽/跨頁面數據通信

1 BrodcastChanner 概念 BroadcastChannel接口表示給定源的任何瀏覽上下文都可以訂閱的命名頻道。它允許同源的不同瀏覽器窗口、標簽頁、frame 或者 iframe 下的不同文檔之間相互通信。消息通過message事件進行廣播&#xff0c;該事件在偵聽該頻道的所有BroadcastChannel對象上…

Mysql-如何理解事務?

一、事務是什么東西 有些場景中&#xff0c;某個操作需要多個sql配合完成&#xff1a; 例如&#xff1a; 李四這個月剩下的前不夠交房租了&#xff0c;找張三借1000元急用&#xff1a; &#xff08;1&#xff09;給張三的賬戶余額 減去1000元 updata 賬戶表 set money money -…

《deepseek FlashMLA :高效的 MLA 解碼內核》:此文為AI自動翻譯

FlashMLA GitHub - deepseek-ai/FlashMLA FlashMLA 是適用于 Hopper GPU 的高效 MLA 解碼內核&#xff0c;針對可變長度序列服務進行了優化。 當前發布&#xff1a; BF16、FP16塊大小為 64 的分頁 kvcache 快速開始 安裝 python setup.py install 基準 python tests/test_fl…

Windows對比MacOS

Windows對比MacOS 文章目錄 Windows對比MacOS1-環境變量1-Windows添加環境變量示例步驟 1&#xff1a;打開環境變量設置窗口步驟 2&#xff1a;添加系統環境變量 2-Mac 系統添加環境變量示例步驟 1&#xff1a;打開終端步驟 2&#xff1a;編輯環境變量配置文件步驟 3&#xff1…

藍橋杯 之 填空題-位運算與循環

文章目錄 循環握手問題門牌制作-循環小球反彈幸運數藝術與籃球跑步 位運算3個1美麗的2024 位運算 可以關注這個Lowbit(x) 如何判斷最低位是否是1&#xff1f; num&1 1就說明num最低位是1 循環 循環 握手問題 握手問題 思路分析&#xff1a; 可以直接計算出來&#xff…