题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
解题思路
BST的第K大其实就是中序遍历的第K个元素,修改了下输入,加上了引用&
,开心的过了。
Code
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
TreeNode* KthNode(TreeNode* pRoot, unsigned int &k)
{
if(!pRoot) return nullptr;
TreeNode *result = KthNode(pRoot->left, k);
if(!result) {
k--;
if(k == 0) result = pRoot;
else result = KthNode(pRoot->right, k);
}
return result;
}
};
- java
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
private int count = 0;
TreeNode KthNode(TreeNode pRoot, int k)
{
TreeNode result = null;
if(k > 0 && pRoot != null) {
if(pRoot.left != null) {
result = KthNode(pRoot.left, k);
if(count == k) return result;
}
count++;
if(count == k) return pRoot;
if(pRoot.right != null) {
result = KthNode(pRoot.right, k);
}
}
return result;
}
}