给定一棵二叉搜索树,请找出其中第k大的节点。
示例 1:
输入: root = [3,1,4,null,2], k = 1
3
/
1 4
2
输出: 4
限制:
1 ≤ k ≤ 二叉搜索树元素个数
思路:
二叉搜索树的中序遍历为递增序列,所以它中序遍历的倒序就是递减序列。针对此题,我们只需求出其中序遍历倒序的第k个节点即可。
代码:
class Solution {
public:
int kth = 0;
int res;;
int kthLargest(TreeNode* root, int k) {
kth = k;
solver(root);
return res;
}
void solver(TreeNode* root){
if(!root) return;
solver(root->right);
kth--;
if(kth == 0){
res = root->val;
return;
}
solver(root->left);
}
};
图和思路借鉴于上面的链接
思考:
1.要掌握二叉搜索树及其相关性质
2.要掌握树的遍历并能灵活运用