一、这个已经有几年时间了,刚开始学习charlie的《windows程序设计》的时候做的。
现在看来,代码很乱,虽然后来还整理过几次,现在这方面没什么兴趣了,有兴趣的可自由下载。

二、绘制二叉树的伪代码

int drawBinaryTree(BinaryTree bt){
Queue main;
Queue slave; mian.enQueue(head node of bt);
while (!empty(main)){
slave.clear(); for each node in main{
drawNode(node);
slave.enQueue(sons of node);
} main.clear();
copy all nodes in slave ==> main;
} return ;
}

三、一些数据结构

////////////////////////////////////////////////////////////////////////////////
void init(int nElem);//初始化
void push(int elem); //数据入栈auxBuffer
int StackEmpty(); //SeniorBuffer无数据则返回真值
void copy(int *src, int *dest);//copy auxBuffer to SeniorBuffer
void destroy();
//绘制哈夫曼树时存储结点序号的栈,采用双缓冲结构
typedef struct tagSTACK{
int * SeniorBuffer; //用于暂存结点序号
int sp1; //元素个数
int * auxBuffer; //缓冲区
int sp2; //缓冲区元素个数
void ( *init )(int nElem); //初始化
void ( *push )(int elem); //数据入栈auxBuffer
int ( *StackEmpty )(); //SeniorBuffer无数据则返回真值
void ( *copy )(int *src, int *dest);//copy auxBuffer to SeniorBuffer
void ( *destroy)();
} STACK;

函数指针,可以模仿C++成员函数调用语法,《面向对象软件构造》附录内也有有提到。

四、绘制森林

最开始的绘制效果结点多的时候容易碰撞,通过观察得出结论:绘制头节点时,手背要尽可能长,两背夹角应该尽可能大,越往下手背越短,夹角变小。
不过过也不能一直变短变小,到一定程度可以固定下来。
这样几百个节点也比最初效果好了。
这段代码很琐碎,我自己都不想看。

void PrepareForest(ForestDemension* _G_fd){
_G_fd->MaxNodeNO = _G_fd->ForestWidth = _G_fd->ForestHeight = ;
} void EnumForestStructMember(PHuffmantreeNode ht, int NodeNO, ForestDemension* _G_fd){
int node = NodeNO; _G_fd->rNodeNO = _G_fd->lNodeNO = ;
while( node && ht[node].lchild ) {_G_fd->lNodeNO++; node = ht[node].lchild;}
node = NodeNO;
while( node && ht[node].rchild ) {_G_fd->rNodeNO++; node = ht[node].rchild;} if (_G_fd->lNodeNO > _G_fd->MaxNodeNO) _G_fd->MaxNodeNO = _G_fd->lNodeNO;
if (_G_fd->rNodeNO > _G_fd->MaxNodeNO) _G_fd->MaxNodeNO = _G_fd->rNodeNO;
} int GetTreeOrigX( ForestDemension *_G_fd ){
double m = ; if ( _G_fd->lNodeNO > - ) m = m + EDGE;
if ( _G_fd->lNodeNO > ) m = m + ;
if ( _G_fd->lNodeNO > ) m = m + ;
if ( _G_fd->lNodeNO > ) m = m + ;
if ( _G_fd->lNodeNO > ) m = m + 13.7 * (_G_fd->lNodeNO-); return (int)(m) + _G_fd->ForestWidth ;
} void SetForestWidth( ForestDemension *_G_fd ){
double m = ; if ( _G_fd->lNodeNO > - ) m = m + EDGE;
if ( _G_fd->lNodeNO > ) m = m + ;
if ( _G_fd->lNodeNO > ) m = m + ;
if ( _G_fd->lNodeNO > ) m = m + ;
if ( _G_fd->lNodeNO > ) m = m + 13.7 * (_G_fd->lNodeNO-); if ( _G_fd->rNodeNO > - ) m = m + EDGE;
if ( _G_fd->rNodeNO > ) m = m + ;
if ( _G_fd->rNodeNO > ) m = m + ;
if ( _G_fd->rNodeNO > ) m = m + ;
if ( _G_fd->rNodeNO > ) m = m + 13.7 * (_G_fd->lNodeNO-); _G_fd->ForestWidth += (int)m;
} void SetForestHeight( ForestDemension *_G_fd ){
double m = 0.1*TREELENGTH; if ( _G_fd->MaxNodeNO < HIERARCHY ) _G_fd->MaxNodeNO = HIERARCHY;
if ( _G_fd->MaxNodeNO > - ) m = m + *EDGE;
if ( _G_fd->MaxNodeNO > ) m = m + +EDGE;
if ( _G_fd->MaxNodeNO > ) m = m + +EDGE;
if ( _G_fd->MaxNodeNO > ) m = m + +EDGE;
if ( _G_fd->MaxNodeNO > ) m = m + (+EDGE) * (_G_fd->MaxNodeNO-); if ( (int)m > _G_fd->ForestHeight ) _G_fd->ForestHeight = (int)m;
}

五,代码打包地址:

//http://ishare.iask.sina.com.cn/f/24162408.html

如何使用Win32API绘制树的更多相关文章

  1. python爬取股票最新数据并用excel绘制树状图

    大家好,最近大A的白马股们简直 跌妈不认,作为重仓了抱团白马股基金的养鸡少年,每日那是一个以泪洗面啊. 不过从金融界最近一个交易日的大盘云图来看,其实很多中小股还是红色滴,绿的都是白马股们. 以下截图 ...

  2. 关于echarts绘制树图形的注意事项(文字倾斜、数据更新、缓存重绘问题等)

    最近项目中使用到echarts的树操作,对其中几点注意事项进行下总结. 效果图: 1.基础配置 options的配置如下: { tooltip: { trigger: 'item', triggerO ...

  3. Anaconda 安装 pydot 绘制树状图

    在***的前提下,控制台输入以下命令: 首先安装 graphviz,这是计算的核心 package conda install graphviz 再安装 pydot ,这是 graphviz 的 py ...

  4. 机器学习实战笔记(Python实现)-02-决策树

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  5. 编译原理LL1文法分析树(绘图过程)算法实现

    import hjzgg.analysistable.AnalysisTable; import hjzgg.first.First; import hjzgg.follow.Follow; impo ...

  6. view的绘制原理

    转:http://blog.csdn.net/berber78/article/details/42069301 自定义UI控件,需继承 View类或View的子类,并重载View类中的一些方法,不必 ...

  7. Qt实现表格树控件-自绘树节点虚线

    目录 一.开心一刻 二.自绘树节点? 三.效果展示 四.实现思路 1.可扩展接口 2.函数重写 3.同步左侧表头 五.相关文章 原文链接:Qt实现表格树控件-自绘树节点虚线 一.开心一刻 一程序员第一 ...

  8. 一篇文教你使用python Turtle库画出“精美碎花小清新风格树”快来拿代码!

    Turtle库手册可以查询查询 python图形绘制库turtle中文开发文档及示例大全,手册中现有示例,不需要自己动手就可以查看演示. 使用Turtle画树,看了一下网上的代码,基本上核心的方法是使 ...

  9. HTML5 程序设计 - 使用HTML5 Canvas API

    请你跟着本篇示例代码实现每个示例,30分钟后,你会高喊:“HTML5 Canvas?!在哥面前,那都不是事儿!” 呵呵.不要被滚动条吓到,很多都是代码和图片.我没有分开写,不过上面给大家提供了目录,方 ...

随机推荐

  1. day22 正则表达式 re

    1. 正则表达式 正则表达式是对字符串操作的一种逻辑公式. 我们一般使用正则表达式对字符串进行匹配和过滤. 工具: 各大文本编辑器⼀般都有正则匹配功能. 我们也可以去http://tool.china ...

  2. python+splinter实现12306网站刷票并自动购票流程

    python+splinter实现12306网站刷票并自动购票流程 通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站 ...

  3. Linux网络编程基础

    1. Linux网络模型 ① OSI七层模型和Linux四层模型 ② 各种协议之间的关系及在Linux模型中的位置 ③ 协议封装:各种协议处于一种层层封装的关系 (1)Ethernet (2)IP * ...

  4. java在window系统的一些问题

    一般的, 在windows cmd上启动 utf-8编码的java应用 会有一些字符集问题 可以修改cmd的字符集编码为utf8 , chcp 65001 java -D有空格时 区别:  VM参数是 ...

  5. pip安装python库

  6. strcpy/strlen/strcat/strcmp的实现

    一.字符串拷贝strcpy 函数strcpy的原型是char* strcpy(char* des , const char* src),des 和 src 所指内存区域不可以重叠且 des 必须有足够 ...

  7. django-filter version 2.0 改动

    今天使用django-filter时候遇到了下面这个问题: django-filter: TypeError at /goods/ init() got an unexpected keyword a ...

  8. PlayMaker 设置颜色 Set Materia lColor

    1. 指定一个游戏对象,Color处设为红色,执行这个行为后就把游戏对象的材质变为了红色: 2. Color也可以使用一个弄好的Color类型的变量,如下图:Color处用了一个提前设置好的变量

  9. 性能测试工具LoadRunner28-LR之内部数据参数类型

    Date/Time 在“Parameter type”中您可以选择Date/Time,即:用当前的日期/时间替换参数.要指定日期/时间的格式,可以从格式列表中选择一个格式,或者指定您自己的格式. [l ...

  10. (转)iptables简介

    iptables简介 原文:https://www.cnblogs.com/metoy/p/4320813.html netfilter/iptables(简称为iptables)组成Linux平台下 ...