bst进行中序遍历,来个vector,最后返回第k个就行了,返回之前,判断k是否越界
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
void inOrderTrave(TreeNode* node,int k, vector<TreeNode*>& vec){
//左根右
if(node->left!=NULL) inOrderTrave(node->left, k, vec);
vec.push_back(node);
if(node->right!=NULL) inOrderTrave(node->right, k, vec);
}
TreeNode* KthNode(TreeNode* pRoot, int k)
{
//bst,左小于根小于等于右
//bst的中序遍历遍历是从小到大的
if(pRoot == NULL || k < 1) return NULL;
vector<TreeNode*> vec;
inOrderTrave(pRoot,k,vec);
//第1小是第0个,k小是k-1个,检查是否越界
if(k > vec.size()) return NULL;
return vec[k-1];
}
};