leetcode 二叉搜索树中第 k 小的元素 中等

 

 

两种:

① 将二叉搜索树还原,即变成有序数组。(空间是 O(n))

② 对于二叉搜索树的一个节点,假设其左儿子子树节点数为 x,那么该节点为相比这颗子树的第 x + 1 小。 (空间是 O(log))

代码是第 ② 中的,注意 base 变量的含义即可。

class Solution {
public:
    int kthSmallest(TreeNode* root, int k) {
        int _ = solve(root, k, 0);
        return ans;
    }

    int solve(TreeNode *root, const int &k, int base) {
        if(root == nullptr) return 0;
        int lefSize = solve(root -> left, k, base);
        if(lefSize + base == k - 1) {
            ans = root -> val;
        }
        int rigSize = solve(root -> right, k, base + lefSize + 1);
        return lefSize + rigSize + 1;
    }
    
    int ans = INT_MIN;
};

 

posted @ 2021-08-01 14:02  rookie_Acmer  阅读(31)  评论(0)    收藏  举报