1. 程式人生 > >劍指offer之二叉搜尋樹的第k個結點

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