劍指 Offer 54. 二叉搜尋樹的第k大節點(遞迴)
阿新 • • 發佈:2020-08-27
- 題目描述
給定一棵二叉搜尋樹,請找出其中第k大的節點。 示例 1: 輸入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2 輸出: 4 示例 2: 輸入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1 輸出: 4
- 解法:中序遍歷+遞迴
二叉搜尋樹性質:
左子樹如果存在,左葉子節點一定小於根節點,右葉子節點一定大於根節點。
解題思路:
那麼如果用中序遍歷此二叉搜尋樹,是不是可以得到一個遞增的序列,但是題目要求我們找第k大的數,那麼我們將中序遍歷的方式改一改,先遍歷右子樹,再遍歷根節點,最後遍歷左子樹,是不是就是一個遞減的序列,然後當遍歷到第k個節點的時候,直接返回即可。(這裡需要注意一下Python的self變數的定義)
class Solution: def kthLargest(self, root: TreeNode, k: int) -> int: def inorder(root): if root.right: inorder(root.right) if self.k == 0: return self.k -= 1 if self.k == 0: self.res = root.valreturn self.res if root.left: inorder(root.left) self.k = k inorder(root) return self.res