Skip to content

Commit 32e9f12

Browse files
committed
Splay Tree and Binary Tree isEqual
1 parent 4955616 commit 32e9f12

File tree

3 files changed

+143
-1
lines changed

3 files changed

+143
-1
lines changed

DataStructure/Trees/Sources/AVLTree.c

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -858,4 +858,49 @@ AVLTreeNode* AVLInOrderSuccessor(AVLTree *avlTree, void *referenceNode){
858858
AVLTreeNode * leftMost = malloc(sizeof(*leftMost));
859859
AVLTreeInOrderSuccessorWrapper(avlTree, avlTree->root,referenceNode,&leftMost);
860860
return leftMost;
861-
}
861+
}
862+
863+
void isEqualHelper(AVLTreeNode* node1,AVLTreeNode* node2,int (*cmpFn)(const void *, const void *), int * flag){
864+
if (cmpFn == NULL) {
865+
fprintf(stderr, INVALID_ARG_MESSAGE, "cmpFn", "isEqualHelper");
866+
#ifdef CU_TEST_H
867+
DUMMY_TEST_DATASTRUCTURE->errorCode = INVALID_ARG;
868+
#else
869+
exit(INVALID_ARG);
870+
#endif
871+
}
872+
if(!flag) return;
873+
if (node1 == NULL || node2 ==NULL) return;
874+
isEqualHelper(node1->right, node2->right,cmpFn,flag);
875+
if(!(cmpFn)(node1->key,node2->key)) *flag = 1;
876+
isEqualHelper(node1->left, node2->right, cmpFn,flag);
877+
}
878+
879+
uint32_t isEqual(AVLTree *avlTree,AVLTree *avlTree2){
880+
if (avlTree == NULL) {
881+
fprintf(stderr, INVALID_ARG_MESSAGE, "avlTree", "isEqual");
882+
#ifdef CU_TEST_H
883+
DUMMY_TEST_DATASTRUCTURE->errorCode = INVALID_ARG;
884+
#else
885+
exit(INVALID_ARG);
886+
#endif
887+
888+
}
889+
890+
if (avlTree2 == NULL) {
891+
fprintf(stderr, INVALID_ARG_MESSAGE, "avlTree2", "isEqual");
892+
#ifdef CU_TEST_H
893+
DUMMY_TEST_DATASTRUCTURE->errorCode = INVALID_ARG;
894+
#else
895+
exit(INVALID_ARG);
896+
#endif
897+
}
898+
899+
if(avlTree->nodeCount < avlTree2->nodeCount) return -1;
900+
if(avlTree->nodeCount > avlTree2->nodeCount) return 1;
901+
else {
902+
uint32_t areEqual = 0;
903+
isEqualHelper(avlTree->root,avlTree2->root,avlTree->cmp, &areEqual);
904+
return areEqual;
905+
}
906+
}

DataStructure/Trees/Sources/BinaryTree.c

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -705,5 +705,51 @@ void BinaryTreeInsert(BinaryTree *binaryTree, void *key){
705705

706706
}
707707
binaryTree->root = binaryTreeInsertWrapper(binaryTree,binaryTree->root,key);
708+
}
709+
710+
708711

712+
void isEqualHelper(BinaryTreeNode* node1,BinaryTreeNode* node2,int (*cmpFn)(const void *, const void *), int * flag){
713+
if (cmpFn == NULL) {
714+
fprintf(stderr, INVALID_ARG_MESSAGE, "cmpFn", "isEqualHelper");
715+
#ifdef CU_TEST_H
716+
DUMMY_TEST_DATASTRUCTURE->errorCode = INVALID_ARG;
717+
#else
718+
exit(INVALID_ARG);
719+
#endif
720+
}
721+
if(!flag) return;
722+
if (node1 == NULL || node2 ==NULL) return;
723+
isEqualHelper(node1->right, node2->right,cmpFn,flag);
724+
if(!(cmpFn)(node1->key,node2->key)) *flag = 1;
725+
isEqualHelper(node1->left, node2->right, cmpFn,flag);
726+
}
727+
728+
uint32_t isEqual(BinaryTree *binaryTree,BinaryTree *binaryTree2){
729+
if (binaryTree == NULL) {
730+
fprintf(stderr, INVALID_ARG_MESSAGE, "binaryTree", "isEqual");
731+
#ifdef CU_TEST_H
732+
DUMMY_TEST_DATASTRUCTURE->errorCode = INVALID_ARG;
733+
#else
734+
exit(INVALID_ARG);
735+
#endif
736+
737+
}
738+
739+
if (binaryTree2 == NULL) {
740+
fprintf(stderr, INVALID_ARG_MESSAGE, "binaryTree2", "isEqual");
741+
#ifdef CU_TEST_H
742+
DUMMY_TEST_DATASTRUCTURE->errorCode = INVALID_ARG;
743+
#else
744+
exit(INVALID_ARG);
745+
#endif
746+
}
747+
748+
if(binaryTree->nodeCount < binaryTree2->nodeCount) return -1;
749+
if(binaryTree->nodeCount > binaryTree2->nodeCount) return 1;
750+
else {
751+
uint32_t areEqual = 0;
752+
isEqualHelper(binaryTree->root,binaryTree2->root,binaryTree->cmp, &areEqual);
753+
return areEqual;
754+
}
709755
}

DataStructure/Trees/Sources/SplayTree.c

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,3 +487,54 @@ void SplayTreeToArrayRecurs(SplayNode* node , void **arr, int *i){
487487
*i += 1;
488488
SplayTreeToArrayRecurs(node->right, arr, i);
489489
}
490+
491+
///
492+
/// \param node1
493+
/// \param node2
494+
/// \param cmpFn
495+
/// \param flag
496+
void isEqualHelper(SplayNode* node1,SplayNode* node2,int (*cmpFn)(const void *, const void *), int * flag){
497+
if (cmpFn == NULL) {
498+
fprintf(stderr, INVALID_ARG_MESSAGE, "cmpFn", "isEqualHelper");
499+
#ifdef CU_TEST_H
500+
DUMMY_TEST_DATASTRUCTURE->errorCode = INVALID_ARG;
501+
#else
502+
exit(INVALID_ARG);
503+
#endif
504+
}
505+
if(!flag) return;
506+
if (node1 == NULL || node2 ==NULL) return;
507+
isEqualHelper(node1->right, node2->right,cmpFn,flag);
508+
if(!(cmpFn)(node1->key,node2->key)) *flag = 1;
509+
isEqualHelper(node1->left, node2->right, cmpFn,flag);
510+
}
511+
512+
513+
514+
uint32_t isEqual(SplayTree *splayTree, SplayTree *splayTree2){
515+
if (splayTree == NULL) {
516+
fprintf(stderr, INVALID_ARG_MESSAGE, "splayTree", "isEqual");
517+
#ifdef CU_TEST_H
518+
DUMMY_TEST_DATASTRUCTURE->errorCode = INVALID_ARG;
519+
#else
520+
exit(INVALID_ARG);
521+
#endif
522+
}
523+
524+
if (splayTree2 == NULL) {
525+
fprintf(stderr, INVALID_ARG_MESSAGE, "splayTree2", "isEqual");
526+
#ifdef CU_TEST_H
527+
DUMMY_TEST_DATASTRUCTURE->errorCode = INVALID_ARG;
528+
#else
529+
exit(INVALID_ARG);
530+
#endif
531+
}
532+
533+
if(splayTree->nodeCount < splayTree2->nodeCount) return -1;
534+
if(splayTree->nodeCount > splayTree2->nodeCount) return 1;
535+
else {
536+
uint32_t areEqual = 0;
537+
isEqualHelper(splayTree->root, splayTree2->root, splayTree->cmp, &areEqual);
538+
return areEqual;
539+
}
540+
}

0 commit comments

Comments
 (0)