剑指 Offer 54. 二叉搜索树的第k大节点
题目描述
给定一棵二叉搜索树,请找出其中第k大的节点。
示例1:
实例2
限制
1 ≤ k ≤ 二叉搜索树元素个数
思路
DFS
右-中-左遍历
- 二叉树节点的右子树比左子树大
- 应该从二叉树的右子树开始搜索,直至没右节点为止
- 通过递归 先找到右子树的最深层的右节点
- 从右子树的最深层的右节点 通过k自减往回寻找
代码
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @param {number} k
* @return {number}
*/
var kthLargest = function(root, k) {
if(!root) return null;
let result = 0;
let dfs = function(node){
if(!node) return;
//一直往下找右节点 即 找最大值的节点
dfs(node.right);
//找到之后 往回数第几大
if(!--k){
return (result = node.val);
}
dfs(node.left);
return result;
}
dfs(root);
return result;
};