二叉树打印算法
这两天实现了各种二叉树平衡算法的java版本,一直追求着如何才能在控制台完美打印一颗较为平衡的二叉树(例如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分支上,望得各位大佬指点,谢谢。