void BSTPrint (const BSTree root, int n) { if (!root) return ; BSTPrint (root->RChild, n+1); int i; for (i = 0; i < n; i++) printf (" "); printf ("%d\n", root->data.key); BSTPrint (root->LChild, n+1); }
void BSTPrint(BSTNode* node) { //Check for null case if (node == NULL) { std::cout << "-" << std::endl; return; } //Print left children if (node->left != NULL) BSTPrint(node->left); //Print self std::cout << "Edge: " << node->edge->start->id << std::endl; //Print right children if (node->right != NULL) BSTPrint(node->right); }
GLint* TriangulatePolygon(const std::list<WCVector4> &pointList) { //Create vertex structs for each point std::list<WCVector4>::const_iterator pointIter = pointList.begin(); std::list<TriangulateVertex*> priorityQueue; int id = 0; TriangulateVertex *vert, *rightVert = NULL; TriangulateEdge *edge; //Process remaining vertices for (pointIter = pointList.begin(); pointIter != pointList.end(); pointIter++) { //Create the new vertex vert = new TriangulateVertex(); //See about cleaning up last vert if (rightVert != NULL) rightVert->left = vert; vert->id = id++; vert->vertex = *pointIter; vert->right = rightVert; //Setup edge and add to vector edge = new TriangulateEdge(); vert->edge = edge; //Add vertex to list and vector priorityQueue.push_back(vert); //Swap vert into rightVert rightVert = vert; } //Clean up first and last verts priorityQueue.front()->right = priorityQueue.back(); priorityQueue.back()->left = priorityQueue.front(); std::list<TriangulateVertex*>::iterator vertIter; //Finish setting up edges for (vertIter = priorityQueue.begin(); vertIter != priorityQueue.end(); vertIter++) { //Set all of the edge properties edge = (*vertIter)->edge; edge->helper = NULL; edge->start = (*vertIter); edge->end = (*vertIter)->left; edge->cw = edge->end->edge; edge->ccw = edge->start->right->edge; //Show some info std::cout << "Edge(" << edge << ") - S:" << edge->start->id << ", E:" << edge->end->id << std::endl; std::cout << "\tHelper: " << edge->helper << ", CW: " << edge->cw << ", CCW: " << edge->ccw << std::endl; } //Sort the vertices TriangulateSort(priorityQueue); //Determine the type of each vertex for (vertIter = priorityQueue.begin(); vertIter != priorityQueue.end(); vertIter++) { TriangulateDetermineType( *vertIter ); std::cout << "Vert(" << *vertIter << "): " << (*vertIter)->id << ", " << (*vertIter)->type << " :: " << (*vertIter)->vertex << std::endl; std::cout << "\tEdge: " << (*vertIter)->edge << ", Left: " << (*vertIter)->left << ", Right: " << (*vertIter)->right << std::endl; } //Process first vertex and create Binary Search Tree BSTNode *bstRoot = NULL; BSTPrint(bstRoot); //Loop until all vertices have been handled while (priorityQueue.size() != 0) { //Get the next vertex vert = priorityQueue.front(); priorityQueue.pop_front(); //Handle the vertex switch(vert->type) { case TRIANGULATIONTYPE_REGULAR: TriangulateHandleRegular(vert, bstRoot); break; case TRIANGULATIONTYPE_START: TriangulateHandleStart(vert, bstRoot); break; case TRIANGULATIONTYPE_END: TriangulateHandleEnd(vert, bstRoot); break; case TRIANGULATIONTYPE_SPLIT: TriangulateHandleSplit(vert, bstRoot); break; case TRIANGULATIONTYPE_MERGE: TriangulateHandleMerge(vert, bstRoot); break; } //Print the tree (left-to-right) BSTPrint(bstRoot); } //Now we have monotone polynomials in the edges, so triangulate //... exit(0); //Delete edge lists //... return NULL; }