给定一棵二叉搜索树,请找出其中第k大的节点。
示例 1:
输入: root = [3,1,4,null,2], k = 1
输出: 4
示例 2:
输入: root = [5,3,6,2,4,null,null,1], k = 3
输出: 4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。](https://img-blog.csdnimg.cn/20210618141634568.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N5d2NhaWJp,size_16,color_FFFFFF,t_70)
思路
1、赶赶单单中序遍历,因为已知是搜索二叉树,一路往右搜索直到最大的节点再递归回来
2、往上递归一层k–,直到k为0,代表已经到达第k大的数,返回当前节点的值即可
class Solution {
public:
int a;
int kthLargest(TreeNode* root, int k) {
dfs(root,k);
return a;
}
void dfs(TreeNode*Node,int &k){
if(!Node)return;
dfs(Node->right,k);
k--;
if(!k)a=Node->val;
if(k>0)dfs(Node->left,k);
}
};