劍指offer之二叉搜尋樹的第k個結點
阿新 • • 發佈:2018-12-16
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;
}