用C++实现二叉树的字符图像自适应显示
2014-10-21 13:09
218 查看
为了实现自适应显示,我的思路:
在绘制当前节点时,如果发现重叠,就将父节点的树枝长度加一,然后清除整个图像,重新绘制。
为此,需要在原来的二叉树节点中增加一个树枝长度属性
内部图像类的设计很关键,它提供随机写入能力,并且需要返回写入是否成功(如果写入点已经不为空,则返回假)
绘制单个节点的接口设计:
它尝试绘制节点,以及它的左右树枝
并在遇到重叠的情况下调整该节点的父节点的树枝长度(每次增加1),并停止绘制
如果没有遇到重叠,就子节点递归,完成整个绘制
整个过程动态调整树枝长度,每次调整后重叠的情况都比之前好一点,最终所有节点都不会重叠
我的收获:
类的接口设计很关键,好的接口设计可以提高代码内部重用性,使代码易写易懂
比如本设计中的绘制节点这个接口的设计
bool Tree::draw_node(Img& img, int w, int h, Node* n, Node* father)
返回bool是由于该方法在绘制时遇到重叠要立即停止递归
int w, int h是绘制节点的位置
Node* n 是当前需要绘制的节点
Node* father 是为了方便修改父节点的长度而考虑加入的
代码长度200行
在绘制当前节点时,如果发现重叠,就将父节点的树枝长度加一,然后清除整个图像,重新绘制。
为此,需要在原来的二叉树节点中增加一个树枝长度属性
内部图像类的设计很关键,它提供随机写入能力,并且需要返回写入是否成功(如果写入点已经不为空,则返回假)
绘制单个节点的接口设计:
它尝试绘制节点,以及它的左右树枝
并在遇到重叠的情况下调整该节点的父节点的树枝长度(每次增加1),并停止绘制
如果没有遇到重叠,就子节点递归,完成整个绘制
整个过程动态调整树枝长度,每次调整后重叠的情况都比之前好一点,最终所有节点都不会重叠
我的收获:
类的接口设计很关键,好的接口设计可以提高代码内部重用性,使代码易写易懂
比如本设计中的绘制节点这个接口的设计
bool Tree::draw_node(Img& img, int w, int h, Node* n, Node* father)
返回bool是由于该方法在绘制时遇到重叠要立即停止递归
int w, int h是绘制节点的位置
Node* n 是当前需要绘制的节点
Node* father 是为了方便修改父节点的长度而考虑加入的
代码长度200行
相关文章推荐
- 用C++实现二叉树的字符图形显示
- MFC下实现 灰度图像显示函数代码 C++
- 两个C/C++的小程序,实现不显示字符的键盘输入和实现动态显示的百分数
- 数字图像处理,自适应中值滤波的C++实现
- C++中最全的图像显示及处理类CxImage
- 用CALL指令模拟实现INT 21H显示字符T的功能
- 使用IPicture的OLE实现读取和显示BMP,GIF,JPG,ICO,EMF,WMF图像
- 最近被一个问题困扰着,如何实现类似Photoshop的多层图像操作,每层可单独操作,又可以组合显示出来。
- 用C++实现二叉树
- VisualC 中实现对图像数据的读取显示
- 数据结构复习:几种排序算法的C++实现和二叉树的相关算法实现
- 二叉树的后序遍历非递归算法之c++实现
- 在.net中与mysql数据库的时候碰到显示不了中文字符的情况实现!
- 基于NiosⅡ的图像采集和显示的实现
- 在Label中实现TextBox一样的换行、回车字符显示功能[WEB学习实例]
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- c++中字符数组或者字符串中的内容在VS debug环境中不能完全显示
- VB实现图像在数据库的存储与显示
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- C++中最全的图像显示及处理类CxImage