给定一棵二叉搜索树,请找出其中第k大的节点。
思路
思路非常直接,由二叉搜索树的性质可知,其中序遍历就是递增遍历结果,则右根左是递减序列,称为逆中序遍历。因此在 逆中序遍历 中计数第k个遍历到的节点即可。
答案
class Solution {
private:
vector<int> v;
void midOrder(TreeNode* node,int k){
if(!node||v.size()==k)
return;
midOrder(node->right,k);
v.push_back(node->val);
midOrder(node->left,k);
}
public:
int kthLargest(TreeNode* root, int k) {
midOrder(root,k);
return v[k-1];
}
};