leetcode——Lowest Common Ancestor of a Binary Tree

題目

Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.

思路

這一次說的是一個普通的二叉樹,給出兩個節點。求他們的最低公共父節點。


回憶一下,當這棵二叉樹是二分查找樹的時候的解決方式:
二分查找樹解法:http://blog.csdn.net/langduhualangdu/article/details/47426339

沒錯。無論是二分查找樹也好還是普通二叉樹也好。他們的共同規律就是:所給出的兩個節點一定在最低公共父節點的兩側

那對于BST來說。能夠通過大小進行比較推斷是不是在當前節點的兩側。普通二叉樹怎樣比較呢?

事實上,我們能夠從反面去考慮這個事情:假設當前節點的某一側子樹沒有所給節點中的不論什么一個。那是不是就能肯定,該節點一定不是最低父節點(節點重合的情況另說),并且,所求節點一定在還有一側。

因此。我們能夠這樣:當前節點假設為null,返回null;假設為所給節點當中之中的一個,則返回該節點;否則,求出當前節點左子樹的返回值和右子數的返回值,假設左右值都不為空。說明當前節點即為所求節點,否則,返回不為空的那個節點。

相同,當得到所求節點后。還是須要檢查所在的樹上是不是同一時候存在所給的兩個節點。應該比較的是節點的地址而不是值。

代碼

public boolean checkExist(TreeNode root, TreeNode p, TreeNode q){if(root==null)return false;boolean pExist = false, qExist = false;Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.add(root);while(!queue.isEmpty()){TreeNode treeNode = queue.poll();if(treeNode==p)pExist = true;if(treeNode==q)qExist = true;if(pExist && qExist)return true;if(treeNode.left!=null)queue.add(treeNode.left);if(treeNode.right!=null)queue.add(treeNode.right);}return false;}public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {TreeNode candidateNode = search(root, p, q);if(checkExist(candidateNode,p,q))return candidateNode;else {return null;}}   public TreeNode search(TreeNode root, TreeNode p, TreeNode q){if(root==null)return null;if(root==p || root==q){return root;} else{TreeNode left = search(root.left, p, q);TreeNode right = search(root.right, p, q);if(left!=null && right!=null)return root;else {return left!=null?left:right;}}}

轉載于:https://www.cnblogs.com/yutingliuyl/p/7289882.html

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

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

相關文章

MySQL-06:pyMySQL增刪改查基本命令筆記

增 # 導入pymysql模塊 import pymysql # 連接database conn pymysql.connect(host“你的數據庫地址”, user“用戶名”,password“密碼”,database“數據庫名”,charset“utf8”) # 得到一個可以執行SQL語句的光標對象 cursor conn.cursor() sql "INSERT INTO USER1(n…

ABP Framework 7.0 RC 新增功能簡介

imageABP Framework 在架構上有四大目標&#xff1a;模塊化、DDD、多租戶和微服務。從 7.0 更新的功能來看&#xff0c;其側重點轉向微服務場景的實現&#xff0c;比如&#xff1a;Dapr 集成、動態權限和功能、外部本地化、分布式實體緩存服務&#xff0c;都是對微服務和分布式…

(原創) 07/28/1982 少女A (中森明菜)

Abstract明菜的第二首單曲&#xff0c;也是她的成名曲&#xff0c;在臺灣曾經被歌手嘟嘟翻唱過。 Introduction[hjp2400,300,true]http://oomusou.googlepages.com/shojo_a.flv[/hjp2] 明菜從『少女A』這首單曲才開始竄紅&#xff0c;走的也是可愛路線&#xff0c;招牌的『明菜…

ftp服務

1.ftp工作原理FTP是一個客戶機/服務系統。用戶通過一個支持FTP協議的客戶機程序&#xff0c;連接到在遠程主機上的FTP服務器程序。用戶通過客戶機程序向服務器程序發出命令&#xff0c;服務器程序執行用戶所發出的命令&#xff0c;并將執行的結果返回到客戶機。2.安裝ftp服務yu…

Spark Streaming高級特性在NDCG計算實踐

從storm到spark streaming&#xff0c;再到flink&#xff0c;流式計算得到長足發展&#xff0c; 依托于spark平臺的spark streaming走出了一條自己的路&#xff0c;其借鑒了spark批處理架構&#xff0c;通過批處理方式實現了實時處理框架。為進一步了解spark streaming的相關內…

mac觸控板 鼠標中鍵_如何在Windows 10中停止意外的觸控板點擊(以及其他鼠標增強功能)...

mac觸控板 鼠標中鍵It’s been the bane of laptop users for years: you’re typing away, your palm brushes the trackpad, and the accidental click inserts the cursor in the middle of the text completely screwing things up. Banish the frustration of accidental …

.Net 7的AOT原理簡析

楔子上節了解AOT和CLR的區別&#xff0c;這節來稍微深入看下AOT的原理是什么&#xff1f;原理其實 AOT 的原理非常簡單&#xff0c;為啥呢&#xff1f;因為微軟又回歸了傳統&#xff0c;搞起來Obj目標文件和Link連接器。當年的VC就是這么弄的。AOT的編譯實際上是圍繞這兩個東西…

垂直居中及容器內圖片垂直居中的CSS解決方法

方法一: <style type"text/css"> <!-- * {margin:0;padding:0} div { width:500px; height:500px; border:1px solid #666; overflow:hidden; position:relative; display:table-cell; text-align:center; vertical-align:middle } div p …

Django04: ORM配置與使用MySQL數據庫

配置&#xff1a; 1.手動創建數據庫。 create database testDB 2. 在Django項目的settings.py文件中&#xff0c;配置數據庫連接信息&#xff1a; DATABASES {"default": {"ENGINE": "django.db.backends.mysql","NAME": "你…

推薦一款 .NET 編寫的 嵌入式平臺的開源仿真器

Renode 是一個開發框架&#xff0c;通過讓你模擬物理硬件系統來加速物聯網和嵌入式系統開發。Renode 可以模擬 Cortex-M、RISC-V 等微控制器&#xff0c;不僅可以模擬 CPU指令&#xff0c;還可以模擬外設&#xff0c;甚至可以模擬板載的外設。更強的是&#xff0c;它可以讓你在…

Android Bluetooth模塊學習筆記

一、藍牙基礎知識 1.藍牙&#xff08; Bluetooth &#xff09;是一種無線技術標準&#xff0c;可實現固定設備、移動設備和樓宇個人域網之間的短距離數據交換。藍牙基于設備低成本的收發器芯片&#xff0c;傳輸距離近、低功耗。 2.微波頻段&#xff1a;使用2.402GGHz到2.480GHz…

sql刪除無人借閱的書_查找,下載,借閱,租賃和購買電子書的最佳網站

sql刪除無人借閱的書So, you’ve got yourself an eBook reader, smartphone, tablet, or other portable device and you want to put some eBooks on it to take with you. There are many options for obtaining free eBooks as well as purchasing, borrowing, or even ren…

django05:ORM示例--person 增刪改查

建立數據庫連接后&#xff0c;演示代碼 見我的資源 https://download.csdn.net/my

C#如何用正則表達式截取https和帶端口的域名

如題。現有代碼如下。只能截取 http://www.baidu.com的 www.baidu.com當域名為https://www.baidu.com 或者為 http://www.baidu.com:8080 時 則無法正確讀取。。求高手給去能截取這樣格式的代碼 Thanks!string p "http://[^\.]*\.(?<domain>[^\.]*)";Regex r…

推薦一個開源的 .NET 二維碼生成庫

你好&#xff0c;這里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;實用的工具和組件&#xff0c;希望對您有用&#xff01;介紹QrCodeGenerator 是開源的 .NET 二維碼生成庫&#xff0c;它支持從文本字符串和字節數組生成二維碼圖片。這個庫是基于 .NET Stan…

vue循環中的v-show

v-show如果使用循環對象的屬性來時控制, 這個屬性必須是加載時就存在的 <div class"list-group col-sm-12" v-for"(issue,index) in issue_list"><a click"switch_comments(issue, index)" style"background-color:#5cb85c;font-w…

C# 圖片畫矩形,添加文字

1.初始設置字體與筆 Pen pen new Pen(Color.FromArgb(220, Color.Green), 5);Font font new Font("微軟雅黑", fontSize, FontStyle.Bold); // 定義字體Brush whiteBrush new SolidBrush(Color.FromArgb(220, Color.Red)); // 畫文字用 2.初始設置圖片和Graphics …

全量更新和增量更新_增量BIOS更新或直接更新到最新版本哪個更好?

全量更新和增量更新There are few things as irritating as a Blue Screen of Death, but sometimes there is an easy fix for it like updating the BIOS for instance. If multiple updates are available though, do you do incremental updates or can you just use the l…

BZOJ4590: [Shoi2015]自動刷題機

【傳送門&#xff1a;BZOJ4590】 簡要題意&#xff1a; 有l秒時間&#xff0c;AC了k道題&#xff0c;給出每秒寫的代碼行數&#xff08;行數>0表示寫&#xff0c;<0表示刪除&#xff0c;如果剩下的行數不夠刪&#xff0c;則為0&#xff09;&#xff0c;假設行數>n時能…

[Office 2010 易寶典]什么是Office Web App?如何在線查看Office文檔?

什么是Office Web App&#xff1f; Office Web App使得Microsoft Office能擴展到網絡瀏覽器上。用戶可以直接在通過瀏覽器在線查看和編輯保存在網站上的文檔。 如何上傳Office文檔&#xff1f; 在Microsoft Word 2010里面&#xff0c;您可以把Word文檔保存到Windows Live SkyDr…