可視化圖解算法: 判斷是不是二叉搜索樹(驗證二叉搜索樹)

1. 題目

描述

給定一個二叉樹根節點,請你判斷這棵樹是不是二叉搜索樹。

二叉搜索樹滿足每個節點的左子樹上的所有節點的值均嚴格小于當前節點的值;并且右子樹上的所有節點的值均嚴格大于當前節點的值。

數據范圍:節點數量滿足 1≤n≤10^4^ ,節點上的值滿足 -2^31^ ≤val≤2^31^?1

示例1

輸入:

{1,2,3}

返回值:

false
示例2

輸入:

{2,1,3}

返回值:

true

2. 解題思路

先來看二叉搜索樹的性質:

二叉搜索樹(Binary Search Tree,簡稱BST)是一種特殊的二叉樹,其每個節點的值都大于左子樹中所有節點的值并且小于右子樹中所有節點的值。二叉搜索樹允許快速查詢、插入和刪除操作,多數操作(插入、刪除和查找)的時間復雜度都是O(log n)。

以下是二叉搜索樹的一些基本特性:

1.左子樹的所有節點的值都小于其父節點。

2.右子樹的所有節點的值都大于其父節點。

3.左、右子樹也必須是二叉搜索樹。

4.每個節點只有一個父節點(除了根節點)和最多兩個子節點(左子節點和右子節點)。

判斷一顆二叉樹是否為二叉搜索樹依賴于樹的左右子樹。可以采用遞歸的方法。

先來看看是否滿足遞歸的兩個條件:

可以看出,判斷二叉樹是否為二叉搜索樹的求解滿足遞歸的兩個條件,因此可以采用遞歸的方法進行求解。

一顆二叉樹是否為二叉搜索樹依賴于節點的左右子樹。對于左子樹,取值范圍為:(-∞,root.val];對于右子樹,取值范圍為: [root.val,+∞)。因此對應的遞推公式如下:

有了遞推公式,就可以很方便的寫出對應的代碼。

如果文字描述的不太清楚,你可以參考視頻的詳細講解。

  • Python版本:https://www.bilibili.com/cheese/play/ep1372111https://www.bilibili.com/cheese/play/ep1372111

  • Java版本:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ep1367350

  • Golang版本:數據結構筆試面試算法-Go語言版_嗶哩嗶哩_bilibili數據結構筆試面試算法-Go語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ep1364775

3. 編碼實現

/*** 代碼中的類名、方法名、參數名已經指定,請勿修改,直接返回方法規定的值即可*** @param root TreeNode類* @return bool布爾型*/
func isValidBST(root *TreeNode) bool {// write code herereturn recursion(root, math.MinInt32, math.MaxInt32) //對于二叉樹來說,取值范圍為:(-∞,+∞)
}func recursion(root *TreeNode, min int, max int) bool {// 2. 遞歸終止條件:// 2.2 如果二叉樹為空,是搜索二叉樹if root == nil {return true}// 2.2 如果當前節點的值小于min或者 大于max,則不是二叉搜索樹if root.Val < min || root.Val > max {return false}// 1. 問題分解(遞推公式)//左子樹取值范圍:(min,root.val];	右子樹取值范圍:[root.val,max)return recursion(root.Left, min, root.Val) && recursion(root.Right, root.Val, max)
}

具體完整代碼你可以參考下面視頻的詳細講解。

  • Python版本:https://www.bilibili.com/cheese/play/ep1372111https://www.bilibili.com/cheese/play/ep1372111

  • Java版本:數據結構筆試面試算法-Java語言版_嗶哩嗶哩_bilibili數據結構筆試面試算法-Java語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ep1367350

  • Golang版本:https://www.bilibili.com/cheese/play/ep1364775https://www.bilibili.com/cheese/play/ep1364775

4.小結

判斷一顆二叉樹是否為二叉搜索樹依賴于樹的左右子樹。可以采用遞歸的方法。對于節點的左子樹,取值范圍為:(-∞,root.val];對于節點的右子樹,取值范圍為: [root.val,+∞)。

《數據結構與算法》深度精講課程正式上線啦!七大核心算法模塊全解析:

?????????? ?鏈表

?????????? ?二叉樹

?????????? ?二分查找、排序

?????????? ?堆、棧、隊列

?????????? ?回溯算法

?????????? ?哈希算法

?????????? ?動態規劃

無論你是備戰筆試面試、提升代碼效率,還是突破技術瓶頸,這套課程都將為你構建扎實的算法思維底座。🔥立即加入學習打卡,與千名開發者共同進階!

  • Python編碼實現:https://www.bilibili.com/cheese/play/ss897667807https://www.bilibili.com/cheese/play/ss897667807

  • Java編碼實現:https://www.bilibili.com/cheese/play/ss161443488https://www.bilibili.com/cheese/play/ss161443488

  • Golang編碼實現:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ss63997

對于二叉樹的相關算法,我們總結了一套【可視化+圖解】方法,依據此方法來解決相關問題,算法變得易于理解,寫出來的代碼可讀性高也不容易出錯。具體也可以參考視頻詳細講解。

今日佳句:長安回望繡成堆,山頂千門次第開。

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

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

相關文章

Markdown轉WPS office工具pandoc實踐筆記

隨著DeepSeek、文心一言、訊飛星火等AI工具快速發展&#xff0c;其輸出網頁內容拷貝到WPS Office過程中&#xff0c;文檔編排規整的格式很難快速復制。 注&#xff1a;WPS Office不支持Markdown格式&#xff0c;無法識別式樣。 在這里推薦個免費開源工具Pandoc&#xff0c;實現…

python的turtle庫實現四葉草

實現代碼&#xff1a; import turtle turtle.pencolor(‘green’) turtle.fillcolor(‘green’) turtle.begin_fill() turtle.circle(100,90) turtle.left(90) turtle.circle(100,90) turtle.right(180) turtle.circle(100, 90) turtle.left(90) turtle.circle(100,90) tu…

北重數控滑臺加工廠家:汽車零部件試驗鐵地板-安全性能的測試方法

汽車零部件的安全性能測試是非常重要的&#xff0c;其中鐵地板測試是其中的一種常見測試方法之一。鐵地板測試主要用于評估汽車零部件在發生碰撞或事故時的安全性能&#xff0c;以確保零部件在各種情況下都能提供有效的保護和安全性能。 鐵地板測試通常包括以下步驟和方法&…

Linux0.11系統調用:預備知識

系統調用 預備知識 目標&#xff1a;了解系統調用的流程&#xff0c;在Linux 0.11上添加兩個系統調用&#xff0c;并編寫兩個簡單的應用程序測試它們。 對應章節&#xff1a;同濟大學趙炯博士的《Linux內核0.11完全注釋&#xff08;修正版V3.0&#xff09;》的第5.5節 下面就針…

如何防止 ES 被 Linux OOM Killer 殺掉

當 Linux 系統內存不足時&#xff0c;內核會找出一個進程 kill 掉它釋放內存&#xff0c;旨在保障整個系統不至于崩潰。如果 ES 按照最佳實踐去實施部署&#xff0c;會保留一半的內存&#xff0c;不至于發生此類事情。但事情總有例外&#xff0c;有的朋友可能 ES 和其他的程序部…

swagger2升級至openapi3的利器--swagger2openapi

背景&#xff1a; 因為項目需要升級JDK&#xff0c;涉及到swagger2升級至openapi3的情況。由于swagger 2和openapi 3的語法差距太大&#xff0c;需要對yaml進行升級。無奈單個yaml文件的內容太大&#xff0c;高至4萬多行&#xff0c;手動進行語法的轉換肯定是不可能了&#xff…

在yolo中Ultralytics是什么意思呢?超越分析的智能

在YOLO&#xff08;You Only Look Once&#xff09;目標檢測框架中&#xff0c;Ultralytics 是一家專注于計算機視覺和機器學習技術的公司&#xff0c;同時也是YOLO系列模型&#xff08;如YOLOv5、YOLOv8等&#xff09;的官方開發和維護團隊。以下是關鍵點解析&#xff1a; 1. …

【阿里云大模型高級工程師ACP習題集】2.7 通過微調增強模型能力 (上篇)(?????? 重點章節!!!)

習題集: 【單選題】在大模型微調中,與提示工程和RAG相比,微調的獨特優勢在于( ) A. 無需外部工具即可提升模型表現 B. 能讓模型學習特定領域知識,提升底層能力 C. 可以更高效地檢索知識 D. 能直接提升模型的知識邊界,無需訓練 【多選題】以下關于機器學習和傳統編程的說…

CuML + Cudf (RAPIDS) 加速python數據分析腳本

如果有人在用Nvidia RAPIDS加速pandas和sklearn等庫&#xff0c;請看我這個小示例&#xff0c;可以節省你大量時間。 1. 創建環境 請使用uv&#xff0c;而非conda/mamba。 # install uv if not yetcurl -LsSf https://astral.sh/uv/install.sh | shuv init data_gpucd data_g…

2-SAT之完美塔防

小N最近喜歡玩一款塔防游戲。 題目描述 這款游戲的棋盤是一個 nm 的網格&#xff0c;每個格子上會有以下類型物件&#xff1a; A 型炮臺&#xff1a;會向上下兩個方向同時發射激光&#xff0c;符號為 |;B 型炮臺&#xff1a;會向左右兩個方向同時發射激光&#xff0c;符號為…

【android bluetooth 案例分析 03】【PTS 測試 】【PBAP/PCE/SSM/BV-02-C】

1. 測試介紹 PBAP/PCE/SSM/BV-02-C [PCE Closes a PBAP Session] 1. Test Purpose Verify that the PCE can terminate a PBAP session. 2. Initial Condition IUT: The IUT is engaged in a PBAP session with the Lower Tester.Lower Tester: The Lower Tester is engag…

ArcGIS:開啟洪水災害普查、評估與制圖新征程

技術點目錄 一、洪水普查技術規范解讀二、ArcGIS介紹及數據管理三、空間數據的轉換與處理四、洪水淹沒專題地圖制作五、矢量數據的采集與處理六、柵格數據的下載與處理七、ArcGIS水文分析八、ArcGIS洪水分析九、ArcGIS淹沒分析了解更多 ———————————————————…

【系統參數合法性校驗】spring-boot-starter-validation

JSR303校驗 統一校驗的需求 前端請求后端接口傳輸參數&#xff0c;是在controller中校驗還是在Service中校驗&#xff1f; 答案是都需要校驗&#xff0c;只是分工不同。 Contoller中校驗請求參數的合法性&#xff0c;包括&#xff1a;必填項校驗&#xff0c;數據格式校驗&…

[零基礎]內網ubuntu映射到云服務器上,http訪問(frp內網穿透)

阿里云服務器&#xff0c;高校教師可以半價&#xff0c; frp下載地址&#xff1a;https://github.com/fatedier/frp/releases&#xff0c;選amd64&#xff0c; 云服務器開放端口 選擇網絡與安全–>安全組->管理規則 配置開放端口&#xff0c;7000為支持frp開放的端口&…

第十六屆藍橋杯 2025 C/C++組 破解信息

目錄 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; 思路&#xff1a; 思路詳解&#xff1a; 代碼&#xff1a; 代碼詳解&#xff1a; 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; P12344 [藍橋杯 2025 省 B/Python B 第二場] 破解信息…

OpenAI Embedding 和密集檢索(如 BERT/DPR)進行語義相似度搜索有什么區別和聯系

OpenAI Embedding 和密集檢索&#xff08;如 BERT/DPR&#xff09;其實是“同一種思想的不同實現”&#xff0c;它們都屬于Dense Retrieval&#xff08;密集向量檢索&#xff09;&#xff0c;只不過使用的模型、部署方式和調用方式不同。 &#x1f9e0; 首先搞清楚&#xff1a;…

Linux電源管理(3)_關機和重啟的過程

原文&#xff1a;Linux電源管理&#xff08;3&#xff09;_Generic PM之重新啟動過程 1.前言 在使用計算機的過程中&#xff0c;關機和重啟是最先學會的兩個操作。同樣&#xff0c;這兩個操作在Linux中也存在&#xff0c;可以關機和重啟。這就是這里要描述的對象。在Linux Ke…

C# 繼承詳解

繼承是面向對象程序設計&#xff08;OOP&#xff09;中的核心概念之一&#xff0c;它極大地增強了代碼的重用性、擴展性和維護性。本篇文章將詳細講解C#中的繼承機制&#xff0c;包括基礎概念、語法特法、多重繼承&#xff08;通過接口實現&#xff09;、繼承的規則和實際應用示…

SQLAlchemy 2.x 異步查詢方法比較

SQLAlchemy 2.x 異步查詢中常用的 結果處理方法速查表&#xff0c;包含方法說明、使用場景、返回類型及典型用途。 SQLAlchemy 查詢結果處理方法速查表&#xff08;適用于 AsyncSession&#xff09; 方法 說明 返回類型 示例 SQL 示例輸出 scalars().all() 獲取單列所有…

極客天成參與”AI助力智慧城市構建”主題演講暨招商引智專題推介活動

4月7日下午&#xff0c;北京極客天成科技有限公司參加了天津市河東區數據局舉辦的“AI賦能智慧城市構建”主題演講暨招商引智專題推介活動。 活動中&#xff0c;華為&#xff08;天津&#xff09;有限公司數字政府解決方案總監姜華庚圍繞“政務大模型賦能智慧城市建設”&#x…