From ba683c4f44538f2d2834aae9d4f2096a5ee1a258 Mon Sep 17 00:00:00 2001 From: cdez Date: Sun, 5 Nov 2023 11:25:45 -0700 Subject: [PATCH] "Complete" PA08 for processing. --- PA08-1101/PA08_Main | Bin 33072 -> 33072 bytes PA08-1101/RedBlackTreeUtility.c | 54 ++++++++++++++++++++------------ 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/PA08-1101/PA08_Main b/PA08-1101/PA08_Main index eb25fd7a9aa5cb085c4195a9cdbaeaa5998e8b67..c516a0d84865681fef5a0dbe1989208dac373b95 100755 GIT binary patch delta 6024 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 U#k0!?bX%G!!KJkoparentPtr != NULL && wkgPtr->parentPtr->parentPtr != NULL) { - printf("\nStarting resolution process.\n"); + // 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 == wkgPtr) + if (wkgGrandParentPtr->leftChildPtr == wkgPtr) { - // set the uncle pointer to the parent's right child - wkgUnclePtr = wkgParentPtr->rightChildPtr; + // set the uncle pointer to the grandparent's right child + wkgUnclePtr = wkgGrandParentPtr->rightChildPtr; } else { - // set the uncle pointer to the parent's left child - wkgUnclePtr = wkgParentPtr->leftChildPtr; + // set the uncle pointer to the grandparent's left child + wkgUnclePtr = wkgGrandParentPtr->leftChildPtr; } wkgGreatGrandParentPtr = wkgGrandParentPtr->parentPtr; // check for red uncle @@ -478,6 +479,9 @@ void resolveRBT(RedBlackNodeType **treeRoot, RedBlackNodeType *wkgPtr) wkgUnclePtr->color = BLACK; // change grandparent to red wkgGrandParentPtr->color = RED; + // print out parent and uncle are red. + printf(" - Parent is red\n"); + printf(" - Uncle is red\n"); // recurse with the grandparent resolveRBT(treeRoot, wkgGrandParentPtr); } @@ -490,17 +494,22 @@ void resolveRBT(RedBlackNodeType **treeRoot, RedBlackNodeType *wkgPtr) // check for child is left of parent (Left Left case) if(wkgParentPtr->leftChildPtr == wkgPtr) { - printf("\nLL Case, rotate right\n"); + // printf("\nLL Case, rotate right\n"); // use rotate right with grandparent(old) and parent(new) + rotateRight(wkgGrandParentPtr, wkgParentPtr); // link the parent to grandparent's parent + wkgPtr->parentPtr = wkgGrandParentPtr->parentPtr; // swap colors called with parent and grandparent + swapColors(wkgParentPtr, wkgGrandParentPtr); } // check for child is right of parent (Left Right case) else { - printf("\nLR Case, rotate right, recurse\n"); + // printf("\nLR Case, rotate right, recurse\n"); // use rotate right with parent(old) and createdNode(new) + rotateRight(wkgParentPtr, wkgPtr); // call resolveRBT with parent as createdNode (will treat as LLC) + resolveRBT(treeRoot, wkgParentPtr); } } // check for parent is right of grandparent @@ -509,17 +518,22 @@ void resolveRBT(RedBlackNodeType **treeRoot, RedBlackNodeType *wkgPtr) // check for child is right of parent (Right Right case) if(wkgParentPtr->rightChildPtr == wkgPtr) { - printf("\nRR Case, rotate left\n"); + // printf("\nRR Case, rotate left\n"); // use rotate left with grandparent(old) and parent(new) + rotateLeft(wkgGrandParentPtr, wkgParentPtr); // link the parent to grandparent's parent + wkgPtr->parentPtr = wkgGrandParentPtr->parentPtr; // swap colors called with parent and grandparent + swapColors(wkgParentPtr, wkgGrandParentPtr); } // check for child is left of parent (Right Left case) else { - printf("\nRL Case, rotate left, recurse\n"); + // printf("\nRL Case, rotate left, recurse\n"); // use rotate left with parent(old) and createdNode(new) + rotateLeft(wkgParentPtr, wkgPtr); // call resolveRBT with parent as createdNode (will treat as RRC) + resolveRBT(treeRoot, wkgParentPtr); } } }