每日一练(26):二叉搜索树的第k大节点

简介: 给定一棵二叉搜索树,请找出其中第 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 ≤ 二叉搜索树元素个数


来源:力扣(LeetCode)


链接:https://leetcode-cn.com/probl...


方法一:vector递归


class Solution {
public:
    vector<int> ans;
    void dfs(TreeNode* root) {
        if (!root) {
            return;
        }
        dfs(root->left);
        ans.push_back(root->val);
        dfs(root->right);
    }
    int kthLargest(TreeNode* root, int k) {
        dfs(root);
        return ans[ans.size() - k];
    }
};


方法二:变量递归


把原本是 “左中右” 的中序遍历改成 “右中左” 的反向中序遍历

维护两个变量 count 和 res 即可。count 用来计数我们在降序的数字序列中走了几位,当走了 k 位时,就让 res 等于当前的 root -> val,然后退出 inorder 函数即可


class Solution {
public:
    // 二叉搜索树的中序遍历是递增序列 
    int  count, res;
    void dfs(TreeNode* root, int k){
        if (root == nullptr) {
            return;
        }
        dfs(root->right, k);
        count++;
        if (count == k) {
            res = root->val;
            return;
        }
        dfs(root->left, k);
    }
    int kthLargest(TreeNode* root, int k) {
        dfs(root, k);
        return res;
    }
};
目录
相关文章
|
6月前
|
存储 算法 IDE
数据结构与算法⑯(第四章_下)二叉树的层序遍历+判断完全二叉树+一道OJ
数据结构与算法⑯(第四章_下)二叉树的层序遍历+判断完全二叉树+一道OJ
53 1
|
算法
代码随想录算法训练营第二十一天 | LeetCode 235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点
代码随想录算法训练营第二十一天 | LeetCode 235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点
63 0
剑指offer-7.二叉树的下一个节点
剑指offer-7.二叉树的下一个节点
37 1
|
C++
剑指Offer - 面试题8:二叉树的下一个节点
剑指Offer - 面试题8:二叉树的下一个节点
62 0
|
算法
代码随想录训练营day22| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点...
代码随想录训练营day22| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点...
剑指offer 07. 二叉树的下一个节点
剑指offer 07. 二叉树的下一个节点
61 0
代码随想录刷题|LeetCode 235.二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
代码随想录刷题|LeetCode 235.二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
在二叉树(搜索树)中找到两个节点的最近公共祖先(剑指offer)
在二叉树(搜索树)中找到两个节点的最近公共祖先(剑指offer)
123 0
在二叉树(搜索树)中找到两个节点的最近公共祖先(剑指offer)
|
算法 Java 开发者
树的“最近公共祖先”问题,面试不再怕了!
本文所列题目来自 LeetCode 中国网站,属于算法面试中关于二叉树的经典高频考题(求二叉树的最近公共祖先)。题解由 Doocs 开源社区 leetcode 项目维护者提供。
141 0
树的“最近公共祖先”问题,面试不再怕了!
|
算法
力扣每日一题:993.二叉树的堂兄弟节点 深度优先算法
力扣每日一题:993.二叉树的堂兄弟节点 深度优先算法
115 0