From 9c24cee2dfdc25b3ebf49a26fb75ae075ddc6a6e Mon Sep 17 00:00:00 2001 From: cdez Date: Tue, 31 Oct 2023 19:07:47 -0700 Subject: [PATCH] Fixed Leverington Issues, resolve still no worky +- PA08_Main +- RedBlackTreeUtility.c --- PA08-1101/PA08_Main | Bin 33072 -> 33072 bytes PA08-1101/RedBlackTreeUtility.c | 45 ++++++++++++++++---------------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/PA08-1101/PA08_Main b/PA08-1101/PA08_Main index 2a663c2c06741405bba2f7ce3247cd3c969d7d48..eb25fd7a9aa5cb085c4195a9cdbaeaa5998e8b67 100755 GIT binary patch delta 3898 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 ZwK?R`pSwA$M}$;lDG?Q(%GJ9y{{wRRO3wfQ delta 3897 zcmZ{n3se->8OP_YpspY=D%l+shn0scuXTC3N)sVvWmSA&q>@GrL=aHWZhWCtF)^lD zSF8BN9HKVHR+}7S8tEnm<4J33BDFEfHfdaqFAT=D7P8%3x8*%@%nIo+fG-^~3U z_c7nSGwgp+vmgKZGVSF=F7UfdJTqx)Bb2*Z*LY@Pd|SS9+e30_ZVVch|M|2tDGPs- za6arG8|obEa&M1a>e|q&gJ*Zi9$hjl%I38CZO*(Xo1@kHr6ft}z23I&@Zu;}NA!bU z?4avg;eD3iw6?*qFAR|{H875Yr_#{fI1i0QvQyzdClA?tX>D*6nC>9Xlv{w%WF3! zX|44db6T(ET5qmC(m4oOi(&&kw!oS5eg%)sSS){qEhQu&2~CSbz3Tk7n$^M<;Ypq?(+m{T(@3Vd+#+5Tay%4vYouGShxzUL+NWC%JAj8qB^pH*y z<6~KWs*N{BXMQh9$Bx{J9Co+F=D4hk_ayC&cd)ILm5{|tL*&2{J+T}uPcVigUXvu+ zlx(2;@d8~;5ZSRUi8*}MPkb||Fww|L$(}fq-J=tU8Dm@iEf2j5v-8+CMwbnibAK&A zc?pJfhnIvotsN=WF3hfTn(CDI(CG|~9Z?!_NeG%s7VQ~fir5p}^aEWQG1gcb+_d*9 z3T7k9(s2~4ofm8pX+lyAE2rwD%>48Epv)tcnA=KBbFgU-Oit@EqZ8`Y3%Ei>1@)J6RJg zH|6RJF3FR-xn`A@TO1RZqF*k7G&*jY%}%&dMjBX5#}mlt3_SZwlK+G|m0JWMra zvtdA#+-IxzyNiLtAdq5P(DijXWG-OFEg2askuozLm+LS?U~iB!BSkaq0=JA2;Q+>7xz|6CS=lQeoTs9Ak-bWnGm{=WbS`+asKe<^aaqZlL+1h+ z55;R~QC5TIYpiZUCQspVs)x@apDfu)teVQRpJCzjadsMef;zK}gLi);F9|Bj`giP$ z?SZup?2ArH&k@3Z{jlLEJ(V+ySzOII6SZ6NKBEVDgGrbF^ngj_%b%-^U0hwWD0bPx z=jT^ejHLzn>l-#`IBqIViK!{1hjxdJctkB8n|R!)T5ydYyx+j zMgs89pa*Qg%>CdwP#?;1xo438tOZNKby)Ix@G#f}CZ9(<_y*_!pSpl}@Fb}3&2e`? z3z&vdDDBFoeP532a~bjAb+EJn7pdPN0r*F-2^@3<3BZ}42Xugb@BpaSa@;qd z1!On_O2L_6J@^^e1XkhnX#rmXJzye^PCv+ZA|CIXv!DgshcmjN6c=M~#Mgs6uOk6? z0c-)q8%O|_fqrl!s7Iyoc)wV{yN~a9v$69B09<0v&sW4i=1HZ&G`KPG~wVNh9&G(fu2Wiw*eyI`LMK zZ6h=E6ct-V!%);|ne1kbh?2!iY!S`e03q`!n%!Oik zII3NEBqFLO;u<1CQS`Zp?#cLkV6e()v1?*spBHS`l=sXg6?V)6ef@>p(5J`;eUEsX z$PSPh`UMq3?~@&Rml|!NA?%DK{qB)`ulD3C!X|r#-0&sxLH|Vjc#+*EGjt&pLo3J* zT||x0cc~fLMQ-S5@bQ8Dx^*`W#42z`s1p}WZqO(Y-GM|_dUc90obM8(jL$PSgLu}CzC z*mrrs{V#jC#zm-%vE+tt8Tp`f#7`2Lo6OJ&R1957cIeyG2>qU#p;hFDVvV3K;wOvj z8kwPEs2IA`WuN?E1pTUCEG5mdFpsNz)|3#`a&x&(aOBIwz{XX;h2es61Gx3nUcL#3 zzWupE)wDA=>%x&rbDnCAK}E^2sl-?6gtyhvqAUWx395A@ zL8>V=g6>ytW&jn_ZihE7Hkv;o=(tbD$SLub&6`;N&I{rcC~SSAzMoJ`8wf_x~iS3=ZC82X4*C1gbx}wbPlmv z6TYv^wK_J7#@CvJRciiiYLpdwK_1~|YJ}(0^hvEwC=nH7_e!pZk37PiBl+~`xzM*m;|R$(g%c_61@j p%cjOvCaot&F?#6ODtT-0t4-R6f9;N6JxW_vpm>zI9IM~b{0|wbM#lgE diff --git a/PA08-1101/RedBlackTreeUtility.c b/PA08-1101/RedBlackTreeUtility.c index d064cb2..146a230 100644 --- a/PA08-1101/RedBlackTreeUtility.c +++ b/PA08-1101/RedBlackTreeUtility.c @@ -37,14 +37,9 @@ Dependencies: free */ RedBlackNodeType *clearTree(RedBlackNodeType *localPtr) { - // recurse through the left children - if (localPtr->leftChildPtr != NULL) + if(localPtr->leftChildPtr != NULL && localPtr->rightChildPtr != NULL) { clearTree(localPtr->leftChildPtr); - } - // recurse through the right children - if (localPtr->rightChildPtr != NULL) - { clearTree(localPtr->rightChildPtr); } // otherwise, free the local pointer if at end of getting to bottom tree @@ -99,7 +94,7 @@ RedBlackNodeType *createNodeFromData(char data, int nodeColor) // define a new node RedBlackNodeType *newNode; // allocate memory for the newNode (RedBlackNodeType) - newNode = malloc(sizeof(RedBlackNodeType)); + newNode = (RedBlackNodeType*)malloc(sizeof(RedBlackNodeType)); // define the color as the new node's color newNode->color = nodeColor; // define the data of the new node to be the input data @@ -290,6 +285,7 @@ Dependencies: getMax */ int findTreeHeight(RedBlackNodeType *localPtr) { + int leftTreeSize, rightTreeSize; // check to see if at null if(localPtr == NULL) { @@ -299,8 +295,8 @@ int findTreeHeight(RedBlackNodeType *localPtr) else { // traverse the left and right subtrees - int leftTreeSize = findTreeHeight(localPtr->leftChildPtr); - int rightTreeSize = findTreeHeight(localPtr->rightChildPtr); + leftTreeSize = findTreeHeight(localPtr->leftChildPtr); + rightTreeSize = findTreeHeight(localPtr->rightChildPtr); // return the max of the subtrees, add one for the local node return getMax(leftTreeSize, rightTreeSize) + 1; } @@ -398,7 +394,6 @@ RedBlackNodeType *insertHelper(RedBlackNodeType *wkgPtr, char inData) // return recursion return insertHelper(wkgPtr->leftChildPtr, inData); } - // otherwise, check for moving right (diffChar > 0) else if(diffChar > 0) { @@ -413,13 +408,9 @@ RedBlackNodeType *insertHelper(RedBlackNodeType *wkgPtr, char inData) // return recursion return insertHelper(wkgPtr->rightChildPtr, inData); } - // otherwise, there is a duplicate - else - { // return NULL - return NULL; - } + return NULL; } /* @@ -455,6 +446,7 @@ Dependencies: printf, rotateLeft, rotateRight, swapColors, */ void resolveRBT(RedBlackNodeType **treeRoot, RedBlackNodeType *wkgPtr) { + printf("\nAttempting to Resolve RBT\n"); // declare parPtr, grndParPtr, unclePtr, grtGrndPtr RedBlackNodeType *wkgParentPtr; RedBlackNodeType *wkgGrandParentPtr; @@ -463,10 +455,11 @@ void resolveRBT(RedBlackNodeType **treeRoot, RedBlackNodeType *wkgPtr) // check for parent and grandparent exists if(wkgPtr->parentPtr != NULL && wkgPtr->parentPtr->parentPtr != NULL) { + printf("\nStarting resolution process.\n"); // set all my relatives, will need to know which child I am wkgParentPtr = wkgPtr->parentPtr; wkgGrandParentPtr = wkgParentPtr->parentPtr; - if (wkgParentPtr->leftChildPtr->data == wkgPtr->data) + if (wkgParentPtr->leftChildPtr == wkgPtr) { // set the uncle pointer to the parent's right child wkgUnclePtr = wkgParentPtr->rightChildPtr; @@ -492,10 +485,10 @@ void resolveRBT(RedBlackNodeType **treeRoot, RedBlackNodeType *wkgPtr) else { // check for parent is left of grandparent - if(wkgGrandParentPtr->leftChildPtr->data == wkgParentPtr->data) + if(wkgGrandParentPtr->leftChildPtr == wkgParentPtr) { // check for child is left of parent (Left Left case) - if(wkgParentPtr->leftChildPtr->data == wkgPtr->data) + if(wkgParentPtr->leftChildPtr == wkgPtr) { printf("\nLL Case, rotate right\n"); // use rotate right with grandparent(old) and parent(new) @@ -503,7 +496,7 @@ void resolveRBT(RedBlackNodeType **treeRoot, RedBlackNodeType *wkgPtr) // swap colors called with parent and grandparent } // check for child is right of parent (Left Right case) - if(wkgParentPtr->rightChildPtr->data == wkgPtr->data) + else { printf("\nLR Case, rotate right, recurse\n"); // use rotate right with parent(old) and createdNode(new) @@ -511,10 +504,10 @@ void resolveRBT(RedBlackNodeType **treeRoot, RedBlackNodeType *wkgPtr) } } // check for parent is right of grandparent - if(wkgGrandParentPtr->rightChildPtr->data == wkgParentPtr->data) + else { // check for child is right of parent (Right Right case) - if(wkgParentPtr->rightChildPtr->data == wkgPtr->data) + if(wkgParentPtr->rightChildPtr == wkgPtr) { printf("\nRR Case, rotate left\n"); // use rotate left with grandparent(old) and parent(new) @@ -522,7 +515,7 @@ void resolveRBT(RedBlackNodeType **treeRoot, RedBlackNodeType *wkgPtr) // swap colors called with parent and grandparent } // check for child is left of parent (Right Left case) - if(wkgParentPtr->leftChildPtr->data == wkgPtr->data) + else { printf("\nRL Case, rotate left, recurse\n"); // use rotate left with parent(old) and createdNode(new) @@ -538,6 +531,14 @@ void resolveRBT(RedBlackNodeType **treeRoot, RedBlackNodeType *wkgPtr) // paint it black wkgPtr->color = BLACK; } + // print out the structure, version data + displayTreeStructure(*treeRoot, NODE_DATA); + // print the thin divider + displayDivider(*treeRoot, THIN_DIVIDER); + // print out the structure, version color + displayTreeStructure(*treeRoot, NODE_COLOR); + // print the thick divider + displayDivider(*treeRoot, THICK_DIVIDER); // no return, void. }