用顯示的棧實現插入,完成非遞迴的插入.
這網吧的破顯示器太爛了....自己小調了下,呵呵.
棧好久不寫了,冷不丁一寫,還真是遇到了問題.不過還好,現在搞清楚了.
好了,貼吧.
/*12-17-11-03-28-18.49.c -- 第十二章第十七題*/<br />#include <stdio.h><br />#include <stdlib.h><br />#include "treapTree.h"</p><p>TreapTree Insert_T (TreapTree tt, const Item item) ;</p><p>TreapTree Insert_T (TreapTree tt, const Item item)<br />{<br />Stack stack ;<br />Node * scan, * newNode, * parent ;</p><p>Initialize_S (&stack) ;<br />scan = tt ;<br />while (scan != NullNode)<br />{<br />if (item < scan -> item)<br />{<br />Push_S (&stack, scan) ;<br />scan = scan -> left ;<br />}<br />else if (item > scan -> item)<br />{<br />Push_S (&stack, scan) ;<br />scan = scan -> right ;<br />}<br />/*Otherwise it's a duplicate.*/<br />else<br />{<br />Release_S (&stack) ;<br />return tt ;<br />}<br />}<br />newNode = makeNode (item) ;<br />if (NULL == newNode)<br />{<br />Release_S (&stack) ;<br />return tt ;<br />}<br />scan = newNode ;<br />while (!IsEmpty_S (&stack))<br />{<br />parent = Pop_S (&stack) -> items ;<br />if (scan -> item < parent -> item)<br />{<br />parent -> left = scan ;<br />if (parent -> left -> priority < parent -> priority)<br />scan = singleRotateWithLeft (parent) ;<br />else<br />scan = parent ;<br />}<br />else<br />{<br />parent -> right = scan ;<br />if (parent -> right -> priority < parent -> priority)<br />scan = singleRotateWithRight (parent) ;<br />else<br />scan = parent ;<br />}<br />}<br />tt = scan ;<br />Release_S (&stack) ;</p><p>return tt ;<br />}