#include <ncurses.h>
#include "drawNode.h"
#include "config.h"
static int getHeight(int level)
{
if(level == 1)
return 0;
if(level == 2)
return 3;
if(level == 3)
return 6;
if(level == 4)
return 9;
if(level == 5)
return 12;
if(level == 6)
return 15;
}
static int getLevel(int index)
{
if(index == 1)
return 1;
if(index >= 2 && index <= 3)
return 2;
if(index >= 4 && index <= 7)
return 3;
if(index >= 8 && index <= 15)
return 4;
if(index >= 16 && index <= 31)
return 5;
if(index >= 32 && index <= 61)
return 6;
}
static float simple_pow(float e, int n)
{
int flag = 0;
if(n < 0)
{
n *= -1;
flag = 1;
}
float result = 1.0f;
while(n>0)
{
result *= e;
--n;
}
if(flag)
{
result = 1 / result;
}
return result;
}
static bool isOnLeft(int index)
{
int level = getLevel(index);
float value = 3 * simple_pow(2, level-2);
if(index < value)
{
return true;
}
else
{
return false;
}
}
int getBaseIndex(int index)
{
int level = getLevel(index);
return simple_pow(2, level-1);
}
float getBaseCoord(int index)
{
int level = getLevel(index);
/*
bool isLeft = isOnLeft(index);
float length = 1 / simple_pow(2, level-2) * LEAF_MARGIN;
*/
switch(level)
{
case 1:
return 0;
case 2:
return 2;
case 3:
return 3;
case 4:
return 3.5;
case 5:
return 3.75;
case 6:
return 3.875;
}
}
void drawNode(int index, int data)
{
if(index <= 0 || index >= 32)
// if(index <= 0 || index >= 64)
return;
int i;
int level = getLevel(index);
int height = getHeight(level);
int offset = index - getBaseIndex(index);
float coord = getBaseCoord(index) * LEAF_MARGIN;
coord = COLS/2 - coord;
float length = 1 / simple_pow(2, level-2) * LEAF_MARGIN;
float center = 0.0f;
while(offset--)
{
center += length * 4;
}
center += coord;
int left = center - length;
int right = center + length;
move(height, (int)center);
printw("%d", data);
move(height+1, left);
if(index <= MAX_NODE)
{
i = length;
while(i--)
printw("%c", '_');
printw("%c", '|');
i = length;
while(i--)
printw("%c", '_');
move(height+2, left);
printw("%c", '|');
move(height+2, right);
printw("%c", '|');
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
画二叉树小工具dtree源码
5星 · 超过95%的资源 需积分: 46 177 下载量 111 浏览量
2013-12-06
14:06:34
上传
评论 3
收藏 2KB GZ 举报
温馨提示
共7个文件
cpp:3个
h:3个
makefile:1个
画二叉树小工具源码。博文链接地址 http://blog.csdn.net/karizhang
资源推荐
资源详情
资源评论
收起资源包目录
dtree.tar.gz (7个子文件)
dtree
drawNode.h 114B
draw.cpp 1KB
draw.h 419B
drawNode.cpp 2KB
main.cpp 299B
config.h 178B
Makefile 213B
共 7 条
- 1
kari_zhang
- 粉丝: 34
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页