1. 程式人生 > 實用技巧 >劍指 Offer 54. 二叉搜尋樹的第k大節點(遞迴)

劍指 Offer 54. 二叉搜尋樹的第k大節點(遞迴)

  • 題目描述
給定一棵二叉搜尋樹,請找出其中第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.val
                
return self.res if root.left: inorder(root.left) self.k = k inorder(root) return self.res