力扣 - 劍指 Offer 54. 二叉搜尋樹的第k大節點
阿新 • • 發佈:2021-11-24
題目
思路1
- 二叉搜尋樹的特性就是中序遍歷結果為遞增序列,而題目要求的是第 k 大節點,所以就應該是要遍歷結果為降序,
- 按照
先遍歷左子樹、輸出節點、遍歷右子樹
得到的是升序結果,要得到降序,需要按照先遍歷右子樹、輸出節點、再遍歷左子樹
即可 - 什麼時候結束遞迴呢?有兩種情況:
- root 為
null
的時候,代表遍歷到葉子節點了,此時需要返回 - 當前節點為第 k 大節點:每遍歷到一個節點,將 k 值減1,直到 k 值為 0 ,說明找到第 k 大節點了,此時記錄下節點的值,然後開始返回
- root 為
程式碼
class Solution { int k; int res; public int kthLargest(TreeNode root, int k) { this.k = k; dfs(root); return res; } public void dfs(TreeNode node) { if (node == null) { return; } dfs(node.right); k--; if (k == 0) { res = node.val; return; } dfs(node.left); } }
複雜度分析
- 時間複雜度:\(O(N)\)
- 空間複雜度:\(O(N)\)