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; };