LeetCode230. Kth Smallest Element in a BST

来源:互联网 发布:文心雕龙数据库有吗 编辑:程序博客网 时间:2024/06/13 23:04

LeetCode230. Kth Smallest Element in a BST

题目:

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?

题目分析:
分析1,这是一棵树,所以我们优先考虑递归去实现
分析2,这是一颗BST,所以是排序的。
因此可以通过分析它的子问题和终止条件得到这道题的解决方案。

代码:
/** * 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) {        int t = find(root->left);        if (k > t) {            if (k == t + 1) return root->val;            else return kthSmallest(root->right, k - t - 1);        } else {            return kthSmallest(root->left, k);        }    }    int find(TreeNode* root) {        if (!root) return 0;        int left = find(root->left);        int right = find(root->right);        return left + right + 1;    }};



原创粉丝点击