leetcode 230. 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?


struct TreeNode {
	int val;
	TreeNode *left;
	TreeNode *right;
	TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
private:
	int cur;
	int val;
	void traverse(TreeNode* node, int k)
	{
		if(node!=NULL)
		{
			if(node->left!=NULL)
			{
				traverse(node->left,k);
			}
			cur++;
			//cout<<node->val<<endl;
			if(cur==k)
			{
				val=node->val;
				return;
			}
			if(node->right!=NULL)
			{
				traverse(node->right,k);
			}
		}
	}
public:
	int kthSmallest(TreeNode* root, int k) {
		cur=0;
		val=-1;
		traverse(root,k);
		return val;
	}
};

这个很简单。左-根-右顺序遍历即可


accepted

你可能感兴趣的:(LeetCode)