书上的一道习题,本以为很简单,却一不小心搞了5个小时.还好,搞出来了. 不多说了,贴代码,很清楚的代码. Node * FindKthMin_S (const SplayTree * const pst, int k) { Node * scan ; if (k > (*pst) -> current || k <= 0) return NULL ; scan = (*pst) -> root ; while (1) { if (scan -> leftSubTreeCount + 1 == k) break ; else if (scan -> leftSubTreeCount >= k) scan = scan -> left ; else { k = k - scan -> leftSubTreeCount - 1 ; scan = scan -> right ; } } /* Not must to do. */ (*pst) -> root = splay ((*pst) -> root, &scan -> item) ; return scan ; } Node * FindKthMax_S (const SplayTree * const pst, int k) { Node * scan ; if (k > (*pst) -> current || k <= 0) return NULL ; scan = (*pst) -> root ; while (1) { if (scan -> rightSubTreeCount + 1 == k) break ; else if (scan -> rightSubTreeCount >= k) scan = scan -> right ; else { k = k - scan -> rightSubTreeCount - 1 ; scan = scan -> left ; } } (*pst) -> root = splay ((*pst) -> root, &scan -> item) ; return scan ; }