一、这个已经有几年时间了,刚开始学习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

最新文章

  1. Django基础之wsgi
  2. Spring Boot 添加Shiro支持
  3. 集合List内容
  4. What is the PPA and How to do with it ?
  5. 学习WCF之——wcf程序的创建
  6. hdu2923 最短路floyd
  7. [转]ubuntu错误解决E: Sub-process /usr/bin/dpkg returned an error code (1)
  8. 函数mem_area_alloc
  9. LXNetwork – 基于AF3.0封装的iOS网络请求库
  10. 查询Linux系统最后重启时间的三个方法
  11. c# 使用Codosys.dll(CDO)发送邮件
  12. Linux 最简单的驱动程序hello world
  13. HDU [1529] || POJ [P1275] Cashier Employment
  14. Dom属性方法
  15. H5学习之旅-H5的超链接以及图片链接(6)
  16. 剑指Offer_编程题_25
  17. docker部署Javaweb环境数据库连接问题
  18. 赵丽颖固然漂亮,可这份Hadoop核心教程也不差呀
  19. win10下安装GLPK
  20. ELK学习笔记之F5利用ELK进行应用数据挖掘系列(1)-HTTP

热门文章

  1. Photoshop在网页设计中的应用与方法
  2. yii2 basic VER
  3. java线程类图
  4. my06_sysbench install for mysql 并初始化表数据
  5. django-filter version 2.0 改动
  6. windows下修改了系统变量里java_home所引用的jdk,但是查询jdk的版本并没有发生改变
  7. RestTemplate中几种常见的请求方式
  8. AUTO Uninstaller 下载 (maya/3dsmax/cad/Inventor/Revit uninstall tool 卸载修复工具)
  9. IPM的修炼之路
  10. 【client】与【offset】