给定一棵二叉搜索树,请找出其中第k大的节点。
二叉搜索树的中序遍历,是满足从小到大的排序性质的,因此要找第k大,直接中序遍历翻转(右根左),找出第k个就行了。
class Solution {
public:
int k = 0;
int res = 0;
void dfs(TreeNode* root){
if(root == nullptr || k == 0) return;
dfs(root->right);
k--;
if(k == 0){
res = root->val;
return;
}
dfs(root->left);
return;
}
int findTargetNode(TreeNode* root, int cnt) {
k = cnt;
dfs(root);
return res;
}
};