- 题目:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
- idea:使用中序遍历,每遍历一个结点k–,假如k==0则将ans改成该结点。
- code
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
#include <bits/stdc++.h>
class Solution {
public:
static void find(TreeNode* pRoot, int &k, TreeNode* &ans){
if (!pRoot || !k) return;
find(pRoot->left, k, ans);
k--;
if (!k){
ans = pRoot;
return;
}
find(pRoot->right, k, ans);
}
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if (!pRoot && k < 1) return NULL;
TreeNode *ans = NULL;
find(pRoot, k, ans);
return ans;
}
};