folk_ 2016-07-13 13:13 采纳率: 66.7%
浏览 1990
已采纳

MFC 画二叉树 网上找了代码 求解释每行的意思 大概解释就行

//画二叉树
void paint(CDC *pDC,int parent,int x,int y,int c,int d)//c表示该节点的层次,d表示该节点与其父的左右关系
{
double pi=3.1415926;//用于计算分支度数,需改进,有交叉树
int ix,iy,ix0,iy0;
float hd1,hd2;

if(c%2==0&&d!=4){hd1=pi/6;hd2=pi/3;}
else{hd1=pi/3;hd2=pi/6;}

ix0=50*cos(hd1);
iy0=50*sin(hd1);
if(htnode[parent].leftChild!=-1)
{
    paint(pDC,htnode[parent].leftChild,x-ix0,y+iy0,c+1,-1);
}
    pDC->Ellipse(x-10,y-10,x+8,y+8);
    char string[5];
    itoa(htnode[parent].weight,string,10);
    pDC->TextOut(x-4,y-8,str); 
    if(d!=0)
    {
        ix=x-8*cos(hd2)*d;
        iy=y-8*sin(hd2);
        pDC->MoveTo(ix,iy);
        ix=x-36*cos(hd2)*d;
        iy=y-36*sin(hd2);
        pDC->LineTo(ix,iy);
    }
    if(htnode[parent].rightChild!=-1)
        paint(pDC,htnode[parent].rightChild,x+ix0,y+iy0,c+1,1);

}
void paint(CDC *pDC)
{
paint(pDC,2*num-2,175,10,0,0);
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2016-07-13 15:40
    关注
     void paint(CDC *pDC,int parent,int x,int y,int c,int d)//c表示该节点的层次,d表示该节点与其父的左右关系
    {
    double pi=3.1415926;//用于计算分支度数,需改进,有交叉树
    int ix,iy,ix0,iy0;
    float hd1,hd2;
    if(c%2==0&&d!=4){hd1=pi/6;hd2=pi/3;}
    else{hd1=pi/3;hd2=pi/6;}
    
    ix0=50*cos(hd1);
    iy0=50*sin(hd1);
    if(htnode[parent].leftChild!=-1)
    {
        paint(pDC,htnode[parent].leftChild,x-ix0,y+iy0,c+1,-1);
    }
        pDC->Ellipse(x-10,y-10,x+8,y+8); //画圆圈
        char string[5];
        itoa(htnode[parent].weight,string,10); //将数字转换为字符
        pDC->TextOut(x-4,y-8,str);  // 写字
        if(d!=0)
        {
            ix=x-8*cos(hd2)*d; //计算节点的位置
            iy=y-8*sin(hd2);
            pDC->MoveTo(ix,iy); //移动当前画笔位置
            ix=x-36*cos(hd2)*d; // 计算下一个节点坐标
            iy=y-36*sin(hd2);
            pDC->LineTo(ix,iy); // 画线连接
        }
        if(htnode[parent].rightChild!=-1)
            paint(pDC,htnode[parent].rightChild,x+ix0,y+iy0,c+1,1); //递归调用下一层的绘图
    }
    void paint(CDC *pDC)
    {
    paint(pDC,2*num-2,175,10,0,0);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码