用C++实现二叉树的字符图像自适应显示

为了实现自适应显示,我的思路:

在绘制当前节点时,如果发现重叠,就将父节点的树枝长度加一,然后清除整个图像,重新绘制。

为此,需要在原来的二叉树节点中增加一个树枝长度属性


内部图像类的设计很关键,它提供随机写入能力,并且需要返回写入是否成功(如果写入点已经不为空,则返回假)


绘制单个节点的接口设计:

它尝试绘制节点,以及它的左右树枝

并在遇到重叠的情况下调整该节点的父节点的树枝长度(每次增加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行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值