1.题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
2.问题分析
因为是二叉搜索树,那么中序遍历的结果就是从小到大,所以结点数值大小第k小,就是中序遍历的第k个。
例如:(5,3,7,2,4,6,8),中序遍历就是(2,3,4,5,6,7,8),所以第3小,就是第3个数,即:4。
3.源代码
void inorder (TreeNode* pRoot, int& k,TreeNode* &pNode)
{
if(pRoot == NULL)
return;
if(pRoot->left != NULL)
inorder(pRoot->left,k,pNode);
--k;
if(k == 0)
{
pNode = pRoot;
return;
}
if(pRoot->right != NULL)
inorder(pRoot->right,k,pNode);
}
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if(pRoot == NULL || k < 1)
return NULL;
TreeNode* pNode = NULL;
inorder(pRoot,k,pNode);
return pNode;
}