【寸鐵的刷題筆記】樹、dfs、bfs、回溯、遞歸(三)

【寸鐵的刷題筆記】樹、dfs、bfs、回溯、遞歸(三)

大家好 我是寸鐵👊
金三銀四,樹、dfs、bfs、回溯、遞歸是必考的知識點?
快跟著寸鐵刷起來!面試順利上岸👋
喜歡的小伙伴可以點點關注 💝


530. 二叉搜索樹的最小絕對差

考點

DFS、雙指針

思路

思路:雙指針,一個指針用于記錄當前的節點(回溯時的當前節點),一個指針用于記錄上一個節點。
不斷更新兩個指針的值的差值的最小值即可


代碼

/*** 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 {/*思路:雙指針,一個指針用于記錄當前的節點(回溯時的當前節點),一個指針用于記錄上一個節點。不斷更新兩個指針的值的差值的最小值即可*/TreeNode pre; //記錄上一個遍歷的節點int result = Integer.MAX_VALUE;public int getMinimumDifference(TreeNode root) {if(root == null)return 0;traversal(root);return result;}public void traversal(TreeNode root){if(root == null)return; // 遍歷到最后一個節點時,終止,向上回溯//左traversal(root.left);//中if(pre != null){result = Math.min(result , root.val - pre.val);}//一開始時,pre為空節點,遞歸到最后一個節點時,記錄當前的節點//向上回溯時,pre為上一個節點,root為此時的節點,做差即可//當pre不為空時,再進行做差取最小值操作。pre = root;//右traversal(root.right);}
}

230. 二叉搜索樹中第K小的元素

考點

DFS、回溯

思路

思路:二叉搜索樹的中序遍歷是有序數組,順序為:從小到大
左<中<右,根據這一點,先遍歷左子樹,判斷遍歷到的節點的數量cnt是否等于k
如果cnt等于k,則說明這個節點就是第k個節點。


代碼

class Solution {int res = -1;//記錄第K個數的節點值int cnt = 0; //記錄當前遍歷到的節點個數/*思路:二叉搜索樹的中序遍歷是有序數組,順序為:從小到大左<中<右,根據這一點,先遍歷左子樹,判斷遍歷到的節點的數量是否等于k如果等于,則說明這個節點就是第k個節點。*/public int kthSmallest(TreeNode root, int k) {dfs(root , k);return res;//res全局變量,直接返回res即可。}public void dfs(TreeNode root, int k){if(root == null)return;//直接結束//左子樹dfs(root.left , k);//注意:這里是第k個 從1開始,cnt要先++if(++cnt == k){res = root.val;return;//一種理解是函數直接結束//一種理解是向上回溯,把結果返回給根節點。}//右子樹dfs(root.right , k);}
}

98. 驗證二叉搜索樹

考點

DFS、雙指針、回溯
530. 二叉搜索樹的最小絕對差的處理邏輯類似

思路

思想:根據定義,節點的左子樹小于當前節點,節點的右子樹大于當前節點
也就是left < middle < right
很自然的就想到了用中序遍歷,再判斷一下是否滿足left < middle < right即可
進一步,我們只需要判斷當前的節點是否小于之前的節點。
如果小于則不滿足條件,向上返回false即可。
否則,則滿足條件。


代碼

class Solution {/*思想:根據定義,節點的左子樹小于當前節點,節點的右子樹大于當前節點也就是left < middle < right很自然的就想到了用中序遍歷,再判斷一下是否滿足left < middle < right即可進一步,我們只需要判斷當前的節點是否小于之前的節點。如果小于則不滿足條件,向上返回false即可。否則,則滿足條件。*/TreeNode pre; //存儲上一個節點public boolean isValidBST(TreeNode root) {//如果節點為空則直接返回trueif(root == null)return true;//左 創建一個變量記錄左子樹遞歸的結果boolean left = isValidBST(root.left);if(!left){return false;}//中 處理條件的邏輯 判斷當前節點是否 <= 上一個節點if(pre != null && root.val <= pre.val){return false;}//一開始為空,記錄上一個節點。pre = root;//右 創建一個變量記錄右子樹遞歸的結果boolean right = isValidBST(root.right);//向上返回右子樹遞歸的結果 right// if(!right){//     return false;// }//與下等效,考慮到方法的返回語句,如下編譯通過。return right;}
}

看到這里的小伙伴,恭喜你又掌握了一個技能👊
希望大家能取得勝利,堅持就是勝利💪
我是寸鐵!我們下期再見💕

往期好文💕

保姆級教程

【保姆級教程】Windows11下go-zero的etcd安裝與初步使用

【保姆級教程】Windows11安裝go-zero代碼生成工具goctl、protoc、go-zero

【Go-Zero】手把手帶你在goland中創建api文件并設置高亮


報錯解決

【Go-Zero】Error: user.api 27:9 syntax error: expected ‘:‘ | ‘IDENT‘ | ‘INT‘, got ‘(‘ 報錯解決方案及api路由注意事項

【Go-Zero】Error: only one service expected goctl一鍵轉換生成rpc服務錯誤解決方案

【Go-Zero】【error】 failed to initialize database, got error Error 1045 (28000):報錯解決方案

【Go-Zero】Error 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)報錯解決方案

【Go-Zero】type mismatch for field “Auth.AccessSecret“, expect “string“, actual “number“報錯解決方案

【Go-Zero】Error: user.api 30:2 syntax error: expected ‘)‘ | ‘KEY‘, got ‘IDENT‘報錯解決方案

【Go-Zero】Windows啟動rpc服務報錯panic:context deadline exceeded解決方案


Go面試向

【Go面試向】defer與time.sleep初探

【Go面試向】defer與return的執行順序初探

【Go面試向】Go程序的執行順序

【Go面試向】rune和byte類型的認識與使用

【Go面試向】實現map穩定的有序遍歷的方式

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

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

相關文章

考研政治這樣復習更高效

政治復習是考研備考中的重要一環&#xff0c;需要考生制定科學的復習計劃&#xff0c;注重知識點的掌握和解題技巧的提升。以下是一些政治復習的建議&#xff1a; 梳理知識框架&#xff1a;首先&#xff0c;需要梳理政治學科的知識框架&#xff0c;了解各個章節之間的內在聯系…

【Vue3】自定義 Vue3 插件(全局實現頁面加載動畫)

// main.ts import { createApp } from vue import App from ./App.vue import Loading from "./components/Loading/index.ts";const app createApp(App) type Lod {show: () > void,hide: () > void } //編寫ts loading 聲明文件放置報錯 和 智能提示 decl…

python實現常見一元隨機變量的概率分布

一. 隨機變量 隨機變量是一個從樣本空間 Ω \Omega Ω到實數空間 R R R的函數&#xff0c;比如隨機變量 X X X可以表示投骰子的點數。隨機變量一般可以分為兩類&#xff1a; 離散型隨機變量&#xff1a;隨機變量的取值為有限個。連續型隨機變量&#xff1a;隨機變量的取值是連…

Redis 群集部署

1.關系型數據庫 關系型數據庫是一個結構化的數據庫&#xff0c;創建在關系模型基礎上&#xff0c;-般面向記錄。它借助于集合代數等數學概念和方法來處理數據庫中的數據。關系模型指二維表格模型,因而一個關系型數據庫就是由二維表及其之間的聯系組成的一個數據組織。現實世界中…

python及編程范式

編程范式 編程范式是一種基于特定的理論和原則來指導程序設計和開發風格的模型。它定義了編程語言的結構、風格、元素以及編寫程序時應遵循的規則。不同的編程范式提供了不同視角來解決問題&#xff0c;影響著代碼組織方式、執行流程以及如何表達程序邏輯。 OOP和FP 函數式編…

vue3監聽input保留兩位小數點

監聽input輸入框校驗 再次記錄下&#xff0c;這里沒封裝&#xff0c;僅演示~ 保留2位小數 只能輸入數字和兩位小數 <el-inputv-model"form.amount"oninput"valuevalue.replace(/[^0-9.]/g,).replace(/\.{2,}/g,.).replace(/^(\-)*(\d)\.(\d\d).*$/,$1$2.$3…

(2024,MixLoRA,任務干擾,獨立因子選擇,條件因子選擇)使用 LoRA 的條件混合進行多模態指令調優

Multimodal Instruction Tuning with Conditional Mixture of LoRA 公和眾和號&#xff1a;EDPJ&#xff08;進 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 進 V 交流群&#xff09; 目錄 0. 摘要 3. 任務干擾在多模態指令調優中的 LoRA 應用 3.1 背景&am…

小甲魚Python07 函數初級

一、創建和調用函數 pass語句表示一個空的代碼塊&#xff0c;我們經常先寫好函數&#xff0c;pass占一個坑&#xff0c;等規劃好之后再來填坑。 函數也是可以指定參數的&#xff0c;我們會把參數傳進去用來替代形參。 在Python里如果想要返回值&#xff0c;不需要指定函數的返…

仿牛客網項目---顯示評論和添加評論功能的實現

這篇文章&#xff0c;我來介紹一下我的項目中的另外一個功能&#xff1a;顯示評論和添加評論。 其實這兩個功能都不怎么重要&#xff0c;我感覺最重要的應該是用戶注冊登錄功能&#xff0c;這個也了解一下&#xff0c;知道這么一回事兒就好。 首先設計DAO層。 Mapper public …

python實現AES加密解密

1. 前言 AES是一種對稱加密&#xff0c;所謂對稱加密就是加密與解密使用的秘鑰是一個。 之前寫過一片關于python AES加密解密的文章&#xff0c;但是這里面細節實在很多&#xff0c;這次我從 參數類型、加密模式、編碼模式、補全模式、等等方面 系統的說明如何使用AES加密解密…

直觀理解卷積

卷積直觀理解 原文來自最容易理解的對卷積(convolution)的解釋 &#x1f3ac;個人簡介&#xff1a;一個全棧工程師的升級之路&#xff01; &#x1f4cb;個人專欄&#xff1a;計算機雜記 &#x1f380;CSDN主頁 發狂的小花 &#x1f304;人生秘訣&#xff1a;學習的本質就是極致…

從經典學習 NLP:小白到大白:1. Word Tokenization

文章目錄 1 Word Tokenization1.1 Top-down/rule-based tokenization1.2 Byte-pair Encoding: A Bottom-up tokenization algorithm 1 Word Tokenization 來源&#xff1a;JM3 Chapter 2.5 p19-23 tokenization 就是 把 running text 分割成為 words&#xff1b; 常有兩種方…

AVL 樹

AVL樹的概念 二叉搜索樹雖可以縮短查找的效率&#xff0c;但如果數據有序或接近有序二叉搜索樹將退化為單支樹&#xff0c;查找元素相當于在順序表中搜索元素&#xff0c;效率低下。因此&#xff0c;兩位俄羅斯的數學家G.M.Adelson-Velskii和E.M.Landis在1962年 發明了一種解決…

k8s筆記26--快速實現prometheus監控harbor

k8s筆記26--快速實現prometheus監控harbor 簡介采集指標&配置grafana面板采集指標配置grafana面板 說明 簡介 harbor是當前最流行的開源容器鏡像倉庫項目&#xff0c;被大量IT團隊廣泛應用于生產、測試環境的項目中。本文基于Harbor、Prometheus、Grafana介紹快速實現監控…

3. 臺階問題

數樓梯 題目描述 樓梯有 N N N 階&#xff0c;上樓可以一步上一階&#xff0c;也可以一步上二階。 編一個程序&#xff0c;計算共有多少種不同的走法。 輸入格式 一個數字&#xff0c;樓梯數。 輸出格式 輸出走的方式總數。 樣例 #1 樣例輸入 #1 4樣例輸出 #1 5提示…

FPGA之帶有進位邏輯的加法運算

module ADDER&#xff08; input [5&#xff1a;0]A&#xff0c; input [5&#xff1a;0]B&#xff0c;output[6&#xff1a;0]Q &#xff09;&#xff1b; assign Q AB&#xff1b; endmodule 綜合結果如下圖所示&#xff1a; 使用了6個Lut&#xff0c;&#xff0c;6個LUT分布…

詳細介紹如何用windows11自帶Hyper-V安裝虛擬機

通過系統自帶的hyper-v安裝windows11&#xff0c;舒服又愜意&#xff0c;相比用第三方虛擬機軟件速度快很多。 硬件準備 1、對于電腦自帶的虛擬機Hyper-V&#xff0c;不是每種電腦系統版本都帶著的。我們先要確定您的系統符合 Hyper-V 的最低要求。我們跟著下面的步驟來執行&…

鴻蒙開發相關知識(四)【數據持久化(用戶首選項、關系型數據庫)、通知(基礎通知、進度條通知、通知意圖)】

文章目錄 一、數據持久化1、用戶首選項&#xff08;1&#xff09;語法說明&#xff08;2&#xff09;完整代碼示例 2、關系型數據庫&#xff08;1&#xff09;初始化數據庫&#xff08;2&#xff09;增刪改數據&#xff08;3&#xff09;查詢數據&#xff08;4&#xff09;完整…

《2023年勒索軟件攻擊態勢報告》

獲取方式&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1zd-yVsuGwJADyyGNFR_TIQ?pwd2lo0 提取碼&#xff1a;2lo0

探索數據結構:解鎖計算世界的密碼

?? 歡迎大家來到貝蒂大講堂?? &#x1f388;&#x1f388;養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; 所屬專欄&#xff1a;數據結構與算法 貝蒂的主頁&#xff1a;Betty‘s blog 前言 隨著應用程序變得越來越復雜和數據越來越豐富&#xff0c;幾百萬、…