剑指 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 ≤ 二叉搜索树元素个数
解题思路:
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
};