半可视化打印二叉树

由于学习树这一章节,查阅了很多资料,网上书上代码上,自己的别人的已然分不开了,如有侵权请留言,如同意我记录于此,也请留言区留下大名,必然感谢!

大致了解了二叉树,那么总是那样 各种顺序的输出,我看着不舒服,也不直观,于是在网上找到了如下方法,我感觉是半可视化打印树,黑窗口下看到这样的效果我仍然激动的想流泪啊:

算法:

从上至下,打印右子树,根节点,左子树

·函数outputTree(BinaryNode * t, bool left, const string s, ostream & out = cout)

·通过第二个 bool  参数判断当前的打印左,右,上面的左子树 和下面的右子树 需要最左边与根相连

·空白和-----数量相等,空白是格式,-----相当于延长链接线并匹配空白

代码:

public:
    void printTree(ostream & out = cout) const { printTree(root, out); }
private:
//上面root->right的left 和 下面root->left的right 需要 | 链接 
void outputTree(BinaryNode * t, bool left, const string s, ostream & out = cout) const {
	if (t->right)
		outputTree(t->right, false, s + (left ? "|     " : "      "), out);
	out << s;
	out << (left ? '\\' : '/');//左连 和右连 的 链接线方向
	out << "-----";
	out << t->element << endl;
	if (t->left)
		outputTree(t->left, true, s + (left ? "      " : "|     "), out);
}

void printTree(BinaryNode * t, ostream & out = cout) const {
	if (t == nullptr) return;
	if (t->right)
		outputTree(t->right, false, "", out);
	out << t->element << endl;
	if (t->left)
		outputTree(t->left, true, "", out);
}

效果图:

我用的是而二叉查找树和AVL树各来一张:



注意问题

·如果相关的 private:printTree() 不加const 会出现2 个重载没有this指针的合法转换

·多看几遍,多理解,多思考,下次自己写出来更好的

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值