问题描述:
给定一棵二叉搜索树,请找出其中第k大的节点。
使用递归,这里是求解第k大的节点 所以可以将中序遍历倒过来进行,中序遍历先遍历左子树,根节点,右子树,现在先遍历右子树,根节点,左子树,这样就可以倒着找第k大的节点。如果找到该节点立马返回,不用再遍历左子树了,节省时间。&k尤其要注意。不然传入的是值,不是引用。
class Solution {
public:
int ans;
int kthLargest(TreeNode* root, int k) {
dfs(root,k);
return ans;
}
void dfs(TreeNode* root, int &k)
{
if(!root) return;
dfs(root->right,k);
k--;
if(!k) ans=root->val;
if(k>0) dfs(root->left,k);
}
};