/* 函数名: 功能: 参数: */ void ShowTree(BinTree bt) { int i,j,old_rx,old_ry,sum=0; MAX_X=getmaxx(),MAX_Y=getmaxy(); BTreeToArr(bt,BTXY); GetBTArrXY(BTXY); /*两个循环是建模时是二维数组,但实践中二维数组错误,于是用了累加 等算法来查找*/ for(i=0;i<5;i++) { for(j=0;j<pow(2,i);j++) { if(i==0) { FilledCircle(BTXY[sum].x,BTXY[sum].y,BTXY[sum].bt->data); }else if(BTXY[sum].bt->data) { old_ry=30+(i-1)*MAX_Y/7; old_rx=pow(-1,j)*MAX_X/pow(2,i+1)+BTXY[sum].x; CLine(old_rx,old_ry+10,BTXY[sum].x,BTXY[sum].y,WHITE); FilledCircle(BTXY[sum].x,BTXY[sum].y,BTXY[sum].bt->data); } sum++; } } }
void Draw::FilledRectangleRoundEdge(SDL_Renderer* renderer, SDL_Rect rectangle, int radius) { // Draw inner rectangle SDL_Rect inner = rectangle; inner.x += radius; inner.y += radius; inner.w -= radius*2; inner.h -= radius*2; SDL_RenderFillRect( renderer, &inner ); // Draw outer SDL_Rect left = rectangle; left.y += radius; left.w = radius; left.h -= radius*2; SDL_RenderFillRect( renderer, &left ); SDL_Rect right = rectangle; right.x += rectangle.w-(radius); right.y += radius; right.w = radius; right.h -= radius*2; SDL_RenderFillRect( renderer, &right ); SDL_Rect up = rectangle; up.x += radius; up.w = rectangle.w-radius*2; up.h = radius; SDL_RenderFillRect( renderer, &up ); SDL_Rect down = rectangle; down.y += rectangle.h-radius; down.x += radius; down.w = rectangle.w-radius*2; down.h = radius; SDL_RenderFillRect( renderer, &down ); // Draw circles FilledCircle(renderer, rectangle.x+radius, rectangle.y+radius, radius); FilledCircle(renderer, rectangle.x+radius, rectangle.y+rectangle.h-radius, radius); FilledCircle(renderer, rectangle.x+rectangle.w-radius, rectangle.y+radius, radius); FilledCircle(renderer, rectangle.x+rectangle.w-radius, rectangle.y+rectangle.h-radius, radius); }