剑指 Offer 54. 二叉搜索树的第k大节点 | 算法

58 阅读1分钟

剑指 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

限制:
1  k  二叉搜索树元素个数

解题思路

www.bilibili.com/video/BV1RA…

python代码实现

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def kthLargest(self, root: TreeNode, k: int) -> int:
        self.count = 0
        def findNode(cur):
            if not cur: return 
            right = findNode(cur.right)
            if right: return right
            self.count += 1
            if self.count == k:
                return cur.val
            left = findNode(cur.left)
            if left: return  left
        return findNode(root)

JS代码实现

/**
 * @param {TreeNode} root
 * @param {number} k
 * @return {number}
 */
var kthLargest = function(root, k) {
    let node
    if (!root) return node
    const dfs = (root) => {
        if (!root) return null
        dfs(root.right)
        k--
        if(!k ) return (node=root.val)
        dfs(root.left)
    }
    dfs(root)
    return node
};