【剑指Offer】面试题54. 二叉搜索树的第k大节点
题目
给定一棵二叉搜索树,请找出其中第k大的节点。
示例 1:
输入: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
2
输出: 4
示例 2:
输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/ \
3 6
/ \
2 4
/
1
输出: 4
限制:
1 ≤ k ≤ 二叉搜索树元素个数
思路
逆中序遍历。
代码
时间复杂度:O(n)
空间复杂度:O(1)
class Solution {
public:
int kthLargest(TreeNode* root, int k) {
stack<TreeNode*> st;
while (root || !st.empty()) {
while (root) {
st.push(root);
root = root->right;
}
TreeNode *node = st.top();
st.pop();
if (--k == 0) return node->val;
root = node->left;
}
return -1;
}
};