230. 二叉搜尋樹中第 K 小的元素

saulstavo發表於2024-12-06

問題描述

給定一個二叉搜尋樹的根節點 root ,和一個整數 k ,請你設計一個演算法查詢其中第 k 小的元素(從 1 開始計數)。

分析

已經給定BST,找出第k大的數字。

  1. 可以利用BST性質:中序遍歷一定是升序陣列,遍歷到第k個結點即為答案,複雜度O(n)
  2. 注意,java中成員變數名與函式形參重名,可以用this.x=x,C++中,可以用this->x=x解決

實現

class Solution {
public:
    int x = 0;
    int k;
    int res;
    void solve(TreeNode* root) {
        if (root == nullptr) {
            return ;
        }
        solve(root->left);
        x++;
        if (x == k) {
            res = root->val;
        }
        solve(root->right);
        return ;
    }
    int kthSmallest(TreeNode* root, int k) {
        if (root == nullptr) {
            return -1;
        }
        this->k = k;
        solve(root);
        return res;
    }
};

相關文章