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

題目:

給定一個二叉搜索樹的根節點 root ,和一個整數 k ,請你設計一個算法查找其中第 k 小的元素(從 1 開始計數)。

示例 1:
在這里插入圖片描述
輸入:root = [3,1,4,null,2], k = 1
輸出:1

示例 2:
在這里插入圖片描述
輸入:root = [5,3,6,2,4,null,null,1], k = 3
輸出:3

提示:
樹中的節點數為 n 。
1 <= k <= n <= 104
0 <= Node.val <= 104

題解:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
# 中序遍歷,就是從小到大開始遍歷
class Solution:def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:ans = 0def dfs(node:Optional[TreeNode]) -> None:nonlocal k,ansif node is None or k==0:return # 遍歷左子樹dfs(node.left)k-=1if k==0:ans = node.val# 遍歷右子樹dfs(node.right)dfs(root)return ans

思路

由于中序遍歷就是在從小到大遍歷節點值,所以遍歷到的第 k 個節點值就是答案。

在中序遍歷,即「左-根-右」的過程中,每次遞歸完左子樹,就把 k 減少 1,表示我們按照中序遍歷訪問到了一個節點。如果減一后 k 變成 0,那么答案就是當前節點的值,用一個外部變量 ans 記錄。

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

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

相關文章

Seaborn數據可視化實戰:Seaborn多變量圖表繪制高級教程

Seaborn多變量圖表實戰&#xff1a;從數據到洞察 學習目標 本課程將帶領學員深入了解Seaborn庫中用于繪制多變量圖表的高級功能&#xff0c;包括聯合圖&#xff08;Joint Plot&#xff09;、對角線圖&#xff08;Pair Plot&#xff09;等。通過本課程的學習&#xff0c;學員將能…

【數智化人物展】首衡科技CTO李蒙:算法會過時,數據會貶值,只有系統智能才具未來性

李蒙本文由首衡科技CTO李蒙投遞并參與由數智猿數據猿上海大數據聯盟共同推出的《2025中國數智化轉型升級先鋒人物》榜單/獎項評選。大數據產業創新服務媒體——聚焦數據 改變商業“算法會過時&#xff0c;數據會貶值。”當我第一次在內部戰略會上拋出這句話時&#xff0c;現場…

word——將其中一頁變成橫向

在word中如何將其中一頁變成橫向&#xff1f; 在需要橫向的這一頁和上一頁插入分節符&#xff08;連續&#xff09; 1.點擊布局→分隔符→分節符&#xff08;連續&#xff09; 2.在所需要橫向頁將紙張方向改為橫向即可。

使用WORD實現論文格式的樣式化制作【標題樣式、自動序列、頁號(分節)、自動目錄(修改字體類型)】

背景 每家院校對論文的格式都有一系列的特定要求&#xff0c;相應的會有一份格式標準的說明文檔&#xff0c;該說明文檔中會羅列對文檔各個項的格式標準要求&#xff08;例如&#xff1a;題目、1級標題、2級標題、頁號、每個級別的字體字號&#xff0c;行距&#xff0c;段前段…

分享一個免費開源的網站跟蹤分析工具Open-Web-Analytics(和GoogleAnalytics一樣)

做獨立網站的福音&#xff0c;這個是免費開源的&#xff0c;可增改性強。 開源地址&#xff1a;https://github.com/Open-Web-Analytics/Open-Web-Analytics 下載源碼包 接著下載PHP工具&#xff1a;我用XP小皮 phpstudy_pro 地址&#xff1a;phpStudy - Windows 一鍵部署 …

Maxscript如何清理3dMax場景?

在3ds Max的創作過程中,隨著項目的推進,場景往往會積累許多冗余元素,如孤立幫助對象、隱藏對象以及空層等,它們不僅讓場景顯得雜亂無章,還會占用資源、降低視口性能,影響工作效率。別擔心,在本教程中,我們將為大家帶來實用妙招——通過簡單的Maxscript腳本片段,快速清…

JavaScript 性能優化實戰:從分析到落地的全指南

一、引言&#xff1a;為什么 JS 性能優化至關重要&#xff1f;用戶體驗的直接影響&#xff1a;加載慢、交互卡頓如何流失用戶&#xff08;引用 Google 研究&#xff1a;頁面加載延遲 1 秒&#xff0c;轉化率下降 7%&#xff09;業務價值關聯&#xff1a;性能優化對 SEO、留存率…

線性回歸學習筆記

一、線性回歸簡介1. 核心定義線性回歸是一種通過屬性的線性組合進行預測的線性模型&#xff0c;核心目標是找到一條直線&#xff08;二維&#xff09;、一個平面&#xff08;三維&#xff09;或更高維的超平面&#xff0c;使模型的預測值與真實值之間的誤差最小化。2. 適用場景…

Kotlin 中適用集合數據的高階函數(forEach、map、filter、groupBy、fold、sortedBy)

在 Kotlin 中,高級函數(Higher-Order Functions)是一個非常強大的特性。高級函數是指可以將函數作為參數傳遞,或者將函數作為返回值返回的函數。這種特性使得代碼更加靈活和可復用。 使用高級函數可以方便地對集合進行操作,如 map、filter、reduce 等。 在事件驅動的編程中…

Redis 哈希表的核心——`dictEntry` 結構體

接上一篇 Redis 哈希表的本質&#xff1a;數組里存的是什么 Redis 哈希表的核心——dictEntry 結構體&#xff0c;是真正承載我們存儲的鍵值對數據的那個結構。 它的定義非常簡潔&#xff0c;但設計得很巧妙。以下是其 C 語言代碼&#xff08;在 Redis 源碼 src/dict.h 中&a…

Jsqlparser + Freemarker + Vue3 數據透視報表設計方案

1. 目標與前置條件目標&#xff1a;基于 JSQLParser FreeMarker Vue3 構建一套“可配置的數據透視報表”能力&#xff0c;實現從任意基礎 SQL/視圖出發&#xff0c;按維度/指標靈活聚合、篩選、排序、分頁、導出&#xff0c;并支持鉆取、聯動、TopN、同比環比等常見分析操作。…

SpringBoot3 Ruoyi芋道管理后臺vben5.0

新技術棧&#xff08;Vue3、Vite6、TypeScript、SpringBoot3/SpringCloud基于Vben5.0最新版本&#xff0c;全面采用Vue3 Vite6 Ant Design Vue TypeScript技術棧&#xff0c;并同時支持SpringBoot3單體架構與SpringCloud微服務架構前端技術棧&#xff1a;Vue3 Vite6 TS A…

K8S - NetworkPolicy的使用

1 前置條件2 控制范圍3 隔離類型4 如何識別5 主要字段6 案例演示 前置條件 網絡策略通過網絡插件來實現。 要使用網絡策略&#xff0c;你必須使用支持 NetworkPolicy 的網絡解決方案。 創建一個 NetworkPolicy 資源對象而沒有控制器來使它生效的話&#xff0c;是沒有任何作用的…

Linux:TCP協議

TCP是一個面向連接的、可靠的、基于字節流的傳輸層協議。文次我們會通過介紹TCP的報頭并通過分析各字段的用途來進一步解釋其核心特性:可靠傳輸&#xff1a; 有確認應答、超時重傳、確保有序。流量控制和擁塞控制&#xff1a; 動態調節發送速率&#xff0c;防止丟包與擁塞。面向…

uniapp使用map打包app后自定義氣泡不顯示解決方法customCallout

前言&#xff1a;使用uniapp開發后在小程序可以正常顯示&#xff0c;但是運行打包成App后就不顯示了&#xff0c;其實這一塊對于uniapp框架開發來說&#xff0c;是有系統性的bug&#xff0c;如果你再開發時使用的是vue文件進行&#xff0c;就會出現這個問題。解決方法&#xff…

【typenum】 22 類型級別二進制對數運算(Logarithm2)

一、源碼 這段代碼實現了一個類型級別的二進制對數運算系統 定義&#xff08;type_operators.rs&#xff09; /// A **type operator** for taking the integer binary logarithm of Self. /// /// The integer binary logarighm of n is the largest integer m such /// that …

golang 非error錯誤分類

1.應用級別&#xff0c;可recover這些 panic 一般是 邏輯或使用不當導致的運行時錯誤&#xff0c;Go 程序可以用 recover 捕獲并繼續運行&#xff1a;類型示例描述類型不一致atomic.Value 存不同類型 v.Store(100); v.Store("abc")panic: store of inconsistently ty…

【Ansible】變量與敏感數據管理:Vault加密與Facts采集詳解

1. 變量Ansible利用變量存儲可重復使用的值&#xff0c;可以簡化項目的創建和維護&#xff0c;減少錯誤數量。1.1 變量名稱由字符串組成&#xff0c;必須以字母開頭&#xff0c;并且只能含有字母、數字和下劃線&#xff0c;和其它編程語言很類似。1.2 常見變量要創建的用戶要安…

ROS2下YOLO+Moveit+PCL機械臂自主避障抓取方案

整體運行架構 1.運行相機取像節點 . ./install/setup.bash ros2 launch orbbec_camera gemini_330_series.launch.py depth_registration:true 2.運行根據圖像x,y獲取z的service 基本操作記錄&#xff1a; 創建python包,在src目錄下 ros2 pkg create test_python_topic --bu…

快速入門Vue3——初體驗

目錄 前言 一、搭建環境 1.1、安裝Node.js 1.2、安裝Vite 二、項目創建 三、運行項目 四、集成Pinia 4.1、Pinia介紹 4.2、Pinia安裝 五、集成VueUse 5.1、vueuse簡介 5.2、vueuse安裝 六、集成Vant 6.1、Vant簡介 6.2、Vant安裝 前言 本專欄主要介紹如何使用…