剑指 Offer 54:二叉搜索树的第k大节点

简介: 剑指 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

解题

方法一:中序遍历的倒序遍历

因为中序遍历的正序遍历是从小到大遍历

因为题目要中第K大的数,因此可以用中序遍历的倒序遍历

遍历顺序:右->中->左

class Solution {
public:
    int kthLargest(TreeNode* root, int k) {
        stack<TreeNode*> st;
        TreeNode* cur=root;
        while(!st.empty()||cur){
            while(cur){
                st.push(cur);
                cur=cur->right;
            }
            cur=st.top();
            st.pop();
            if(--k==0) return cur->val;
            cur=cur->left;
        }
        return -1;
    }
};
相关文章
|
6月前
|
存储
【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
47 1
|
6月前
剑指 Offer 22:链表中倒数第k个节点
剑指 Offer 22:链表中倒数第k个节点
45 1
|
6月前
剑指 Offer 68 - I:二叉搜索树的最近公共祖先
剑指 Offer 68 - I:二叉搜索树的最近公共祖先
446 0
|
6月前
剑指 Offer 68 - II:二叉树的最近公共祖先
剑指 Offer 68 - II:二叉树的最近公共祖先
36 0
|
6月前
剑指 Offer 55 - II:平衡二叉树
剑指 Offer 55 - II:平衡二叉树
41 0
leetcode 剑指 Offer 22. 链表中倒数第k个节点
leetcode 剑指 Offer 22. 链表中倒数第k个节点
51 0
剑指 Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点
图解LeetCode——剑指 Offer 68 - II. 二叉树的最近公共祖先
图解LeetCode——剑指 Offer 68 - II. 二叉树的最近公共祖先
4691 1