// 트리 출력 void blackHeight(Tree *RBT, Node *node, int height) { if (node->color == BLACK) height++; if (node->left != RBT->NIL) { blackHeight(RBT, node->left, height); } if (node->right != RBT->NIL) { blackHeight(RBT, node->right, height); } if (node->left == RBT->NIL && node->right == RBT->NIL) printf("%s, %d\n", node->data->name, height); return; }
void buildTree(void){ treeADT tree=newTree(); string userOP; int userInt,element; printf("\n**** Tree builder ****\n\n"); while(TRUE){ printf("(i)nsert, (d)elete, (f)ind, (p)rint, (q)uit\n"); printf("Your choice: "); userOP=GetLine(); if(StringEqual(userOP,"i")){ printf("To end insertion enter: -1.\n"); while(TRUE){ printf("TreeInsert: "); userInt=GetInteger(); if(userInt==-1) break; treeInsert(tree,userInt); } } if(StringEqual(userOP,"d")){ printf("To end deletion enter: -1.\n"); while(TRUE){ printf("TreeDelete: "); userInt=GetInteger(); if(userInt==-1) break; treeDelete(tree,userInt); } } if(StringEqual(userOP,"f")){ printf("FindNode: "); userInt=GetInteger(); element=findNode(tree,userInt); if(element!=NOT_FOUND) printf("\nFound %d in your tree! :-)\n",userInt); else printf("\nDid not find %d in your tree. :-(\n",userInt); } if(StringEqual(userOP,"p")){ printf("\nThis is your current tree:\n\n"); displayTreeStructure(tree); printf("Preorder: "); printTree(tree,preOrder); printf("Inorder: "); printTree(tree,inOrder); printf("Postorder: "); printTree(tree,postOrder); printf("\n"); printf("Height: %d\n",treeHeight(tree)); printf("Black-height: %d\n",blackHeight(tree)); } if(StringEqual(userOP,"q")) break; printf("\n"); } freeTree(tree); }
void structureTest(void){ treeADT treeOrd,treeRev,treeRan; int TEST_SIZE; system("cls"); printf("Tree Structure Tester\n\n"); printf("Enter tree size (rec. max: 25): "); TEST_SIZE=GetInteger(); if(TEST_SIZE<=0) Error("I refuse!"); treeOrd=buildTestTreeOrdered(TEST_SIZE); printf("Increasing input || Tree size: %d\n\n",TEST_SIZE); displayTreeStructure(treeOrd); printf("Tree-height is: %d\n",treeHeight(treeOrd)); printf("Black-height is: %d\n",blackHeight(treeOrd)); printf("\n\n"); printf("--------------------------------------------\n"); printf("\n"); freeTree(treeOrd); treeRev=buildTestTreeReversed(TEST_SIZE); printf("Decreasing input || Tree size: %d\n\n",TEST_SIZE); displayTreeStructure(treeRev); printf("Tree-height is: %d\n",treeHeight(treeRev)); printf("Black-height is: %d\n",blackHeight(treeRev)); printf("\n\n"); printf("--------------------------------------------\n"); printf("\n"); freeTree(treeOrd); treeRan=buildTestTreeRandom(TEST_SIZE); printf("Random input || Tree size: %d\n\n",TEST_SIZE); displayTreeStructure(treeRan); printf("Tree-height is: %d\n",treeHeight(treeRan)); printf("Black-height is: %d\n",blackHeight(treeRan)); printf("\n\n"); printf("--------------------------------------------\n"); printf("\n"); freeTree(treeRan); printf("\nPress enter to return."); getchar(); }