書上的一道習題,本以為很簡單,卻一不小心搞了5個小時.還好,搞出來了.
不多說了,貼代碼,很清楚的代碼.
Node * FindKthMin_S (const SplayTree * const pst, int k)<br />{<br />Node * scan ;</p><p>if (k > (*pst) -> current || k <= 0)<br />return NULL ;<br />scan = (*pst) -> root ;</p><p>while (1)<br />{<br />if (scan -> leftSubTreeCount + 1 == k)<br />break ;<br />else if (scan -> leftSubTreeCount >= k)<br />scan = scan -> left ;<br />else<br />{<br />k = k - scan -> leftSubTreeCount - 1 ;<br />scan = scan -> right ;<br />}<br />}<br />/*Not must to do.*/<br />(*pst) -> root = splay ((*pst) -> root, &scan -> item) ;</p><p>return scan ;<br />}</p><p>Node * FindKthMax_S (const SplayTree * const pst, int k)<br />{<br />Node * scan ;</p><p>if (k > (*pst) -> current || k <= 0)<br />return NULL ;<br />scan = (*pst) -> root ;</p><p>while (1)<br />{<br />if (scan -> rightSubTreeCount + 1 == k)<br />break ;<br />else if (scan -> rightSubTreeCount >= k)<br />scan = scan -> right ;<br />else<br />{<br />k = k - scan -> rightSubTreeCount - 1 ;<br />scan = scan -> left ;<br />}<br />}<br />(*pst) -> root = splay ((*pst) -> root, &scan -> item) ;</p><p>return scan ;<br />}