在控制台打印二叉树(AVL树)

二叉树打印算法

这两天实现了各种二叉树平衡算法的java版本,一直追求着如何才能在控制台完美打印一颗较为平衡的二叉树(例如avl树),始终无法达到理想,发布一下,希望各位大神给些建议。目前打印图如下
这是一颗avl树的打印
代码如下:

public void printTree(QueueH queueJ) {//queueJ是我自定义的队列
		AvlNode tempNode;
		for (int i = 1; i <= this.deep; i++) {//deep是树的当前深度 
			int frontLength = (1 <<  this.deep - i) - 1;//计算每行第一个元素与行首的间隔
			int totleLength = (1 << this.deep) -1;//计算最下层的最大宽度
			int oneToOneLength = i == 1?0:((totleLength - (2 * frontLength)) - 1)/((1 << i - 1) - 1) - 1;//计算每个节点之间的距离
			StringUtils.repeat(" ",frontLength);打印相应数量的行首空格
			for (int j = 0; j < Math.pow(2, i - 1); j++) {
				int numLength = 0;
				if (queueJ.getNext() != null) {//queueJ初始只有一个root节点
					tempNode = queueJ.deQueue();
					System.out.print(tempNode.getValue());
					numLength = this.countNum(tempNode.getValue());
					queueJ.enQueue(tempNode.getlChild());
					queueJ.enQueue(tempNode.getrChild());
				}else {
					queueJ.deQueue();
					queueJ.enQueue(null);
					queueJ.enQueue(null);
					System.out.print("S");
				}
				StringUtils.repeat(" ",oneToOneLength - numLength/2);//打印节点间的间隔距离
			}
			System.out.println();
		}
		
	}

源码地址:https://github.com/huangxingzhao/algorithmDemo
在dev分支上,望得各位大佬指点,谢谢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值