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.
基本原理类似于二叉树的中序遍历,及左、根、右,而二叉搜索树左、根、右即满足从小到大的排列。
设置一个计数器,记录从最左的节点开始,一直访问到了第几个节点,如果访问到了第K个节点(即第K小的节点),返回当前节点的值。
/**
* 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 ans;
int count = 0;
public:
int kthSmallest(TreeNode* root, int k)
{
dfs(root,k);
return ans;
}
void dfs(TreeNode* root, int k)
{
if (root == NULL)
{
return;
}
dfs(root->left,k);
count++;
if (count == k)
{
ans = root->val;
return;
}
dfs(root->right,k);
}
};