Leetcode中求二叉搜索树第K小的数,
1. 引入一个变量记录当前节点左子树中节点的个数。
如果频繁操作该树,并且频繁的调用kth函数,可以通过引入一个变量,记录该节点的左子树中节点的个数(其实就是有多少个节点比该节点小),使时间复杂度降低至O(h)(h是树的高度)。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int kthSmallest(TreeNode* root, int k) {
if (root == NULL || k < 1) return NULL;
int cnt = countNodes(root->left);
if (k <= cnt)
return kthSmallest(root->left, k);
else if (k > cnt + 1)
return kthSmallest(root->right, k-1-cnt); <span style="font-family: Arial, Helvetica