力扣--二叉搜索树230.二叉搜索树中第K小的元素

思路分析:
 

  1. Solution 类中,声明了一个私有成员变量 ans,用于存储最终结果,即第k小的元素值。

  2. 定义了一个私有成员函数 mid,用于中序遍历二叉搜索树,并在遍历的过程中找到第k小的元素。该函数接受三个参数:当前遍历节点 root、目标排名 k、以及计数器 count

  3. mid 函数中,首先进行递归调用 mid(root->left, k, count),即遍历左子树。

  4. 在每个节点访问时,将计数器 count 自增1,表示当前节点的排名。

  5. 如果计数器 count 等于目标排名 k,则更新结果变量 ans 为当前节点的值 root->val

  6. 继续递归调用 mid(root->right, k, count),即遍历右子树。

  7. kthSmallest 函数中,初始化计数器 count 为0,然后调用 mid(root, k, count) 进行中序遍历。

  8. 返回最终结果 ans,即第k小的元素值。

class Solution {
    int ans = 0;

    // 中序遍历二叉树,找到第 k 小的元素
    void mid(TreeNode* root, int k, int& count) {
        if (root == NULL)
            return;
        else {
            mid(root->left, k, count);
            count++;

            // 当 count 达到 k 时,更新答案
            if (count == k)
                ans = root->val;

            mid(root->right, k, count);
        }
    }

public:
    int kthSmallest(TreeNode* root, int k) {
        int count = 0;

        // 调用中序遍历函数
        mid(root, k, count);

        return ans;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值