您的位置:首页 > 其它

[leetcode] 230. Kth Smallest Element in a BST 解题报告

2016-01-11 14:34 1106 查看
题目链接:https://leetcode.com/problems/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?

Hint:

Try to utilize the property of a BST.
What if you could modify the BST node's structure?
The optimal runtime complexity is O(height of BST).

思路:要找第k个数,中序遍历二叉树, 直到找到第k个

如果要频繁查找的话可以在数据结构中添加一个字段,记录左节点有多少个。这样最多只要O(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) {
stack<TreeNode*> st;
while(root || !st.empty())
{
while(root)
{
st.push(root);
root = root->left;
}
root = st.top();
st.pop();
if(--k ==0) return root->val;
root = root->right;
}
return 0;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: