劍指offer之二叉搜索樹的第k個結點

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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章