代碼隨想錄算法刷題訓練營day22

代碼隨想錄算法刷題訓練營day22:LeetCode(236)二叉樹的最近公共祖先、LeetCode(235) 二叉搜索樹的最近公共祖先、LeetCode(701)二叉搜索樹中的插入操作、LeetCode(450)刪除二叉搜索樹中的節點

LeetCode(236)二叉樹的最近公共祖先
題目
在這里插入圖片描述

代碼

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {//判斷終止----------采用后續遍歷方法----從下往上遍歷//1、根為空if(root==null){return null;}//2、判斷左右子樹的情況-----遞歸思想----返回null---即為沒有if(root.val==p.val||root.val==q.val){return root;//返回當前的pq值---------上面判斷的是返回值}//遞歸遍歷----左右根//左右子樹的處理邏輯----查看左右子樹是否出現pq值----左右子樹為空--的那種情況TreeNode leftTreeNode=lowestCommonAncestor(root.left, p, q);TreeNode rightTreeNode=lowestCommonAncestor(root.right, p, q);//處理根節點-----重點------下面是判斷的是有沒有if(leftTreeNode!=null&&rightTreeNode!=null){return root;//說明左右子樹均找到p或者q的值}else if(leftTreeNode==null&&rightTreeNode!=null){return rightTreeNode;//有確定的了就不會發生變化了}else if(leftTreeNode!=null&&rightTreeNode==null){return leftTreeNode;}else{return null;}}
}

LeetCode(235) 二叉搜索樹的最近公共祖先
題目
在這里插入圖片描述

代碼

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {//判斷終止條件//終止條件1、若根節點為空的時候if(root==null){return root;}//終止條件2、若根節點為pq的某個值時----此時在遍歷的時候就已經進行測試了if(root.val==p.val||root.val==q.val){return root;}//遞歸遍歷//先左子樹遍歷---發現左子樹是否包含p或者q值TreeNode leftTreeNode=lowestCommonAncestor(root.left, p, q);//同樣遍歷右子樹TreeNode rightTreeNode=lowestCommonAncestor(root.right, p, q);//處理根節點if(leftTreeNode!=null&&rightTreeNode!=null){return root;}else if(leftTreeNode!=null&&rightTreeNode==null){return leftTreeNode;}else if(leftTreeNode==null&&rightTreeNode!=null){return rightTreeNode;}else{return null;//對應前面考慮到的左右子樹均為空的情況----靜心判斷}}}

LeetCode(701)二叉搜索樹中的插入操作
題目
在這里插入圖片描述

代碼

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {//在二叉搜索樹上插入節點,因為僅在葉子節點上進行插入就能滿足所有的插入情況---所以不需要改變樹的結構//通過中序遍歷+遞歸算法去做if(root==null){//此時為構造新節點占的位置TreeNode newNode=new TreeNode(val);return newNode;//把新子樹創建出來,并返回回去}//進行判斷,判斷朝左右子樹遞歸的方向if(root.val>val){root.left=insertIntoBST(root.left, val);//將判斷后的值連上}if(root.val<val){root.right=insertIntoBST(root.right, val);//將判斷后的右邊的值返回回去---左右兩邊僅有一邊的值進行返回}//連接完成之后,將根節點的值進行返回return root;//重點----仔細理解}
}

LeetCode(450)刪除二叉搜索樹中的節點
題目
在這里插入圖片描述

代碼

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode deleteNode(TreeNode root, int key) {//考慮刪除節點情況-----一共分為五種情況/* * 1、沒有找到刪除節點* 2、刪除節點為葉子節點* 3、刪除節點有左子樹,沒有右子樹* 4、刪除節點有右子樹,沒有左子樹* 5、刪除節點既有左子樹又有右子樹*///遞歸算法+先序遍歷----先處理根節點在處理左子樹和右子樹//遞歸的終止條件if(root==null){return null;//正常的終止條件------同時也是找不到刪除節點的情況}//第二個終止條件----即找到要刪除的元素if(root.val==key){//判斷四種刪除節點的情況//1、是葉子節點if(root.left==null&&root.right==null){return null;//返回為空,后面連接對應左子樹或者右子樹}else if(root.left!=null&&root.right==null){return root.left;//2、刪除節點有左子樹,沒有右子樹}else if(root.left==null&&root.right!=null){return root.right;//3、刪除節點有右子樹。沒有左子樹}else{//最復雜的一種情況---刪除根節點的左右子樹均不為空TreeNode currentNode=root.right;//找到右子樹最左邊的節點while (currentNode.left!=null) {currentNode=currentNode.left;}//將根節點的左子樹拿出來currentNode.left=root.left;//此時又變成左空由不空的情況return root.right;}}//終止條件處理完了,現在開始處理單次遞歸的情況if(root.val>key){//向左邊遍歷root.left=deleteNode(root.left, key);//此時返回的值直接連接到當前的根節點上}if(root.val<key){//向右邊遍歷root.right=deleteNode(root.right, key);}return root;//最后將根節點返回//最后將根節點返回}}

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

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

相關文章

【鴻蒙 HarmonyOS 4.0】路由router

一、介紹 頁面路由指在應用程序中實現不同頁面之間的跳轉和數據傳遞。HarmonyOS提供了Router模塊&#xff0c;通過不同的url地址&#xff0c;可以方便地進行頁面路由&#xff0c;輕松地訪問不同的頁面。 二、頁面跳轉 2.1、兩種跳轉模式&#xff1a; router.pushUrl()&…

vue2與vue3中父子組件傳參的區別

本次主要針對vue中父子組件傳參所進行講解 一、vue2和vue3父傳子區別 1.vue2的父傳子 1).在父組件子標簽中自定義一個屬性 <sonPage :子組件接收到的類名"傳輸的數據">子組件</sonPage> 2).在子組件中peops屬性中拿到自定屬性 props: {子組件接收的…

Stable Diffusion算法、結構全流程概述

Stable Diffusion能力強、功能多、插件廣&#xff0c;本文擬概述SD的全流程&#xff0c;方便梳理算法各結構的關系 1、stable diffusion訓練用ddpm, 采樣用ddim DDPM的推理采樣步長和訓練時的步長一樣&#xff0c;導致采樣步數過多&#xff0c;推理時間長。DDIM指出&#xff…

安卓游戲開發之音頻技術優劣分析

一、引言 在安卓游戲開發中&#xff0c;音頻處理技術扮演著至關重要的角色&#xff0c;它不僅能夠增強游戲的沉浸感和玩家體驗&#xff0c;還能通過聲音效果傳達關鍵的游戲信息。以下將對幾種常見的安卓游戲音頻處理技術進行優劣分析&#xff0c;并結合應用場景來闡述其特點。 …

docker鏡像打包和解壓

背景 工作記錄 打包鏡像 docker save -o 壓縮包名稱.tar 鏡像名稱:鏡像版本 例如 docker save -o app-web.tar app-web:2.0解壓鏡像 這里解壓上面打包的app-web的壓縮包 docker load<壓縮包名稱.tar docker load<app-web.tar這樣解壓下來的實際就是app-web:2.0這個鏡…

微服務-微服務API網關Spring-clould-gateway實戰

1. 需求背景 在微服務架構中&#xff0c;通常一個系統會被拆分為多個微服務&#xff0c;面對這么多微服務客戶端應該如何去調用呢&#xff1f; 如果根據每個微服務的地址發起調用&#xff0c;存在如下問題&#xff1a; 1.客戶端多次請求不同的微服務&#xff0c;會增加客戶端…

Qt 事件

1. 事件 事件是對各種應用程序需要知道的由應用程序內部或者外部產生的事情或者動作的通稱。在Qt中使用一個對象來表示一個事件&#xff0c;它繼承自QEvent類。 2. 事件和信號 事件與信號并不相同&#xff0c;比如我們使用鼠標點擊了一下界面上的按鈕&#xff0c;那么就會產生…

node 之 初步認識

思考&#xff1a;為什么JavaScript可以在瀏覽器中被執行 代執行的js代碼——JavaScript解析引擎 不同的瀏覽器使用不同的JavaScript解析引擎 Chrome 瀏覽器 》 V8 Firefox瀏覽器 》OdinMonkey(奧丁猴&#xff09; Safri瀏覽器 》JSCore IE瀏覽器 》Chakra(查克拉&#xff09; e…

XML的寫法

下面我將以如下代碼來解釋下XML的寫法 <?xml version"1.0" encoding"UTF-8" ?> <Steam><steam id"1"><zhanghao>admin</zhanghao><mima>123</mima><num>120</num></steam><st…

金航標電子位于廣西柳州鹿寨縣天線生產基地于大年正月初九開工了

金航標電子位于廣西柳州鹿寨縣天線生產基地于大年正月初九開工了&#xff01;&#xff01;&#xff01;金航標kinghelm&#xff08;www.kinghelm.com.cn&#xff09;總部位于中國深圳市&#xff0c;兼顧技術、成本、管理、效率和可持續發展。東莞塘廈實驗室全電波暗室、網絡分析…

關于路徑字串標準化的代碼

上文說到&#xff0c;得到執行的正確路徑。有時這個路徑并不規范&#xff0c;所以要進行一番標準化。具體工作&#xff1a; //替換為//./替換為/../的處理 近來專門研究了一下&#xff0c;寫了個代碼。其實也不難&#xff0c;主要是處理../時麻煩。 char* format_to_exe_path…

運維SRE-06 階段性復習軟件管理體系

那些年運維必會操作-第一彈 操作 文件&#xff1a;增刪改查 增&#xff1a;touch,vim,>,>>,cp刪除&#xff1a;rm修改&#xff1a;內容&#xff1a;vi/vim,>,>> 文件名&#xff1a;mv查看&#xff1a;內容&#xff1a;cat/vim/less/more/head/tail/sed/awk/…

Day03-課后練習-參考答案(流程控制_分支結構)(判斷年、月、日是否合法,判斷打魚還是曬網,判斷星座)

文章目錄 鞏固題1、從鍵盤輸入一個整數&#xff0c;判斷它是否是5的倍數2、從鍵盤輸入一個字符&#xff0c;判斷字符類型3、計算折扣后金額4、輸出月份對應的英語單詞5、計算今天是星期幾 簡答題拔高題&#xff08;自愿&#xff09;6、判斷年、月、日是否合法7、判斷打魚還是曬…

【C++】STL容器之string(迭代器,范圍for)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;個人主頁 &#xff1a;阿然成長日記 …

ubuntu內核卸載重裝

目錄 問題1.問題復現2.可以正常啟動的方式 保存快照卸載有問題的內核重裝最新內核參考資料 問題 1.問題復現 ubuntu開機出現如下畫面,啟動不能正常啟動 2.可以正常啟動的方式 使用其他內核可以正常工作 保存快照 在解決之前保存快照,防止破壞時恢復 卸載有問題的內核…

微信小程序開發:通過wx.login()獲取用戶唯一標識openid和unionid

下面代碼展示了 openid 的獲取過程。 想獲取 unionid 需要滿足條件&#xff1a;小程序已綁定到微信開放平臺賬號下&#xff0c;不然只會返回 openid。 【相關文檔】 微信小程序開發&#xff1a;appid 和 secret 的獲取方法 wx.login({success (res) {if (res.code) {// 發起網…

無心劍小詩《斜杠青年贊歌》

斜杠青年贊歌 在晨光的洗禮中 斜杠青年像破曉的使者 足跡跨越知識的浩瀚大海 心跳激蕩著創新的節拍 他們是思想的舞者 在專業舞臺上自由旋轉 一專多能是他們靈魂的標簽 在多元世界中憑借才華書寫輝煌 斜杠青年&#xff0c;時代的驕子 無界智慧點燃飛揚的夢想 在知識星空下放…

運行jar時提示缺少依賴的類

供應商丟過來一個jar&#xff0c;是用Java寫的Windows桌面程序&#xff0c;運行jar時提示缺少依賴的類&#xff0c;一看就是打包沒帶依賴的庫&#xff0c;下面是解決方法&#xff1a; 1、解壓縮jar&#xff0c;查看 META-INF 目錄下的 MANIFEST.MF&#xff0c;看看都引用了哪些…

D4140——低功耗兩線漏電保護器控制電路。 內置二極管整流橋;觸發電流可調; 延遲時間可調;滿足 UL943 標準要 求。

D4140是一種用于交流插座電器漏電斷路器的低功耗控制器。這些設備可以檢測到接地的危險電流路徑&#xff0c;例如設備掉進水中。在發生有害或致命的電擊之前&#xff0c;斷路器會斷開線路。 D4140內置有整流橋&#xff0c;齊納管穩壓器&#xff0c;運算放大器&#xff0c;電流…

【docker入門】1-

文章目錄 參考&#xff1a; Docker – 容器虛擬化平臺。 參考&#xff1a; docker入門&#xff0c;這一篇就夠了。【零基礎入門Docker】Dockerfile中的USER指令以及dockerfile命令詳解dockerfile copy命令