230. Kth Smallest Element in a BST

来源:互联网 发布:尼尔森数据报告 编辑:程序博客网 时间:2024/05/18 00:42

Given a binary search tree, write a function kthSmallest to find the kth smallest element in it.

Note:
You may assume k is always valid, 1 ≤ k ≤ BST’s total elements.

Follow up:
What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How would you optimize the kthSmallest routine?

在二叉搜索树中,找到第K个元素。

算法如下:

1、计算左子树元素个数left。
2、 left+1 = K,则根节点即为第K个元素
left >= k, 则第K个元素在左子树中,
left +1 < k, 则转换为在右子树中,寻找第K-left-1元素。

/** * 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) return 0;        int lsize = treeSize(root->left);        if (lsize + 1 == k)            return root->val;        else if (lsize >= k)            return kthSmallest(root->left, k);        else            return kthSmallest(root->right, k - lsize - 1);    }    int treeSize(TreeNode *root) {        if (root == NULL) return 0;        return 1 + treeSize(root->left) + treeSize(root->right);    }};
0 0
原创粉丝点击