【劍指Offer系列】68-二叉樹的最近公共祖先(哈希)

在這里插入圖片描述

思路:使用map存儲每個節點的父節點,則兩個節點的最近公共祖先,即二者的最近父節點

1、中序遍歷二叉樹(當前節點的下一個節點)
2、記錄每個節點的父節點
3、列出p的族譜、q的族譜
4、尋找二者最近的祖先

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode n1, TreeNode n2) {if (n1.val == root.val || n2.val == root.val) {return root;}// 1.尋找所所有節點的父節點Map<TreeNode, TreeNode> map = new HashMap<>();findParent(map, root);// 2.n1的家譜(包括自己)List<TreeNode> n1ParentList = getPeople(map, n1);// 3.n2的家譜List<TreeNode> n2ParentList = getPeople(map, n2);// 4.n1和n2的公共長輩的第一個長輩n1ParentList.retainAll(n2ParentList);return n1ParentList.get(0);}private void findParent(Map<TreeNode, TreeNode> map, TreeNode root) {map.put(root, null);TreeNode temp = root;// 1.最左子節點while (temp.left != null) {map.put(temp.left, temp);temp = temp.left;}// 2.下一個節點TreeNode curNode = temp;while (true) {TreeNode nextNode = next(map, curNode);if (nextNode == null) {return;}curNode = nextNode;}}private TreeNode next(Map<TreeNode, TreeNode> map, TreeNode curNode) {if (curNode.right != null) {TreeNode next = curNode.right;map.put(next, curNode);while (next.left != null) {map.put(next.left, next);next = next.left;}return next;} else {TreeNode parent = map.get(curNode);while (true) {if (parent == null) {return null;} else if (parent.left != null && Objects.equals(parent.left.val, curNode.val)) {return parent;} else {curNode = parent;parent = map.get(curNode);}}}}private List<TreeNode> getPeople(Map<TreeNode, TreeNode> map, TreeNode node) {List<TreeNode> list = new ArrayList<>();while (node != null) {list.add(node);TreeNode parent = map.get(node);node = parent;}return list;}
}

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

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

相關文章

微信小程序畢業設計-英語互助系統項目開發實戰(附源碼+論文)

大家好&#xff01;我是程序猿老A&#xff0c;感謝您閱讀本文&#xff0c;歡迎一鍵三連哦。 &#x1f49e;當前專欄&#xff1a;微信小程序畢業設計 精彩專欄推薦&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python畢業設計…

PS系統教程31

調色之色階 調色與通道最基本的關系通道是記錄顏色最基本的信息有些圖片可以用通道去改變顏色信息的說明這些圖像是比較高級的PS是一款圖像合成軟件&#xff0c;在合成過程中需要處理大量素材&#xff0c;比如要用這些素材進行摳背景&#xff0c;就要用到圖層蒙版以及Alpha通道…

Qt編程技巧總結篇(2)-信號-槽-多線程(一)

文章目錄 Qt編程技巧總結篇&#xff08;2&#xff09;-信號-槽-多線程&#xff08;一&#xff09;信號與槽實例與應用 小結 Qt編程技巧總結篇&#xff08;2&#xff09;-信號-槽-多線程&#xff08;一&#xff09; 最近學習信號與槽以及多線程&#xff0c;非常有技術含量&#…

【詳解】RV1106移植opencv-mobile庫

文章目錄 前言一、燒入鏡像二、編譯項目1.創建項目文件 三、移植四、運行文件五、總結 前言 硬件&#xff1a;瑞芯微Rv1106【Luckfox Pro\Max Pico、網線一根、USB線、串口助手、攝像頭 軟件&#xff1a;ubuntu 20.4 編譯器&#xff1a;arm-rockchip830-linux-uclibcgnueabihf…

人工智能——常用數學基礎之線代中的矩陣

1. 矩陣的本質&#xff1a; 矩陣本質上是一種數學結構&#xff0c;它由按照特定規則排列的數字組成&#xff0c;通常被表示為一個二維數組。矩陣可以用于描述一組數據&#xff0c;或者表示某種關系&#xff0c;比如線性變換。 在人工智能中&#xff0c;矩陣常被用來表示數據集…

【單片機與嵌入式】stm32串口通信入門

一、串口通信/協議 &#xff08;一&#xff09;串口通信簡介 串口通信是一種通過串行傳輸方式在電子設備之間進行數據交換的通信方式。它通常涉及兩條線&#xff08;一條用于發送數據&#xff0c;一條用于接收數據&#xff09;&#xff0c;適用于各種設備&#xff0c;從微控制…

Spring中利用重載與靜態分派

Spring中利用重載與靜態分派 在Java和Spring框架中&#xff0c;重載&#xff08;Overloading&#xff09;和靜態分派&#xff08;Static Dispatch&#xff09;是兩個非常重要的概念&#xff0c;它們在處理類方法選擇和執行過程中扮演著關鍵角色。本文旨在深入探討Spring環境下…

入選頂會ICML,清華AIR等聯合發布蛋白質語言模型ESM-AA,超越傳統SOTA

作為細胞內無數生化反應的驅動力&#xff0c;蛋白質在細胞微觀世界中扮演著建筑師和工程師的角色&#xff0c;不僅催化著生命活動&#xff0c;更是構筑、維系生物體形態與功能的基礎構件。正是蛋白質之間的互動、協同作用&#xff0c;支撐起了生命的宏偉藍圖。 然而&#xff0…

Ubuntu DNS服務配置 深度解析

測試方法 resolvectl status dig alidns.com 修改實踐 直接用接口配置&#xff0c;沒用 /etc/resolv.conf&#xff0c;有效 /etc/netplan/01-network-manager-all.yaml,無效 /etc/systemd/resolved.conf&#xff0c;見link&#xff0c;為全局配置 [Resolve] DNS1.1.1.1 Fa…

Adobe Premiere 視頻編輯軟件下載安裝,pr全系列分享 輕松編輯視頻

Adobe Premiere&#xff0c;自其誕生之日起&#xff0c;便以其卓越的性能和出色的表現&#xff0c;穩坐視頻編輯領域的王者寶座&#xff0c;贏得了無數專業編輯人員與廣大愛好者的青睞。這款強大的視頻編輯軟件&#xff0c;憑借其豐富的功能和靈活的操作性&#xff0c;為用戶提…

2024年道路運輸安全員(企業管理人員)備考題庫資料。

46.危險貨物道路運輸隨車攜帶的單據&#xff0c;下列選項不屬于的是&#xff08;&#xff09;。 A.道路運輸危險貨物安全卡 B.運單或者電子運單 C.道路危險貨物運輸從業資格證 D.車輛檢測報告 答案&#xff1a;D 47.危險貨物運輸駕駛人員在24小時內實際駕駛車輛時間累計不…

ROS2在rviz2中實時顯示軌跡和點

本文是將《ROS在rviz中實時顯示軌跡和點》博客中rviz軌跡顯示轉為ROS2環境中的rviz2顯示。 ros2的工作空間創建這里就不展示了。 包的創建 ros2 pkg create --build-type ament_cmake showpath --dependencies rclcpp nav_msgs geometry_msgs tf2_geometry_msgsshowpath.cpp…

Windows批處理入門:快速掌握批處理腳本的基本技巧

一、前言 在Windows操作系統中&#xff0c;批處理文件&#xff08;Batch File&#xff09;是一種非常實用的工具&#xff0c;它允許用戶通過簡單的命令行腳本來自動化各種任務。無論是系統管理員、開發人員&#xff0c;還是普通用戶&#xff0c;掌握批處理文件的基本知識都能極…

【漏洞復現】和豐多媒體信息發布系統 QH.aspx 任意文件上傳漏洞

0x01 產品簡介 和豐多媒體信息發布系統也稱數字標牌&#xff08;Digital Signage&#xff09;&#xff0c;是指通過大屏幕終端顯示設備&#xff0c;發布商業、財經和娛樂信息的多媒體專業視聽系統&#xff0c;常被稱為除紙張媒體、電臺、電視、互聯網之外的“第五媒體”。該系…

Ansible如何控制playbook的執行順序

對 Ansible 劇本資源打標簽 在處理大型或復雜的劇本時,如果只希望運行部分劇本或部分任務。可以將標簽應用于可能要跳過或運行的特定資源。 通過標簽來標記資源,在資源上使用tags關鍵字,然后是要應用的標記列表。在Ansible中tags標記可用于下列資源&#xff1a; 每個任務,這…

1-4.時間序列數據建模流程范例

文章最前&#xff1a; 我是Octopus&#xff0c;這個名字來源于我的中文名–章魚&#xff1b;我熱愛編程、熱愛算法、熱愛開源。所有源碼在我的個人github &#xff1b;這博客是記錄我學習的點點滴滴&#xff0c;如果您對 Python、Java、AI、算法有興趣&#xff0c;可以關注我的…

信息學奧賽初賽天天練-41-CSP-J2021基礎題-n個數取最大、樹的邊數、遞歸、遞推、深度優先搜索應用

PDF文檔公眾號回復關鍵字:20240701 2021 CSP-J 選擇題 單項選擇題&#xff08;共15題&#xff0c;每題2分&#xff0c;共計30分&#xff1a;每題有且僅有一個正確選項&#xff09; 4.以比較作為基本運算&#xff0c;在N個數中找出最大數&#xff0c;最壞情況下所需要的最少比…

我在中東做MCN,月賺10萬美金

圖片&#xff5c;Photo by Ben Koorengevel on Unsplash ©自象限原創 作者丨程心 在迪拜購物中心和世界最高建筑哈利法塔旁的主街上&#xff0c;徐晉已經“蹲”了三個小時&#xff0c;每當遇到穿著時髦的年輕男女&#xff0c;他都會上前詢問&#xff0c;有沒有意愿成為…

【計算機網絡】常見的網絡通信協議

目錄 1. TCP/IP協議 2. HTTP協議 3. FTP協議 4. SMTP協議 5. POP3協議 6. IMAP協議 7. DNS協議 8. DHCP協議 9. SSH協議 10. SSL/TLS協議 11. SNMP協議 12. NTP協議 13. VoIP協議 14. WebSocket協議 15. BGP協議 16. OSPF協議 17. RIP協議 18. ICMP協議 1…

網頁自動化測試開發中記錄pytest

1切換cmd文件目錄C:\Users\14600>D: D:\>cd D:\worksoftware D:\worksoftware>2單個py文件打包成.exe文件1.pyinstaller -F -c (項目主文件)test_01shouye.py 該路徑下存在文件名&#xff0c;主項目文件 test_01shouye.py 2.執行spec文件&#xff1a; pyinstaller -F …