横向遍历二叉树
思路:
维护一个节点队列和两个节点引用nlast(上一层最后一个节点)和last(本行最后一个节点)。
初始化时候,nlast = last = root
然后不断取出队列的第一个元素(BinaryTreeNode)node,然后将node的左右孩子节点加入队列,并移动nlast到最后一个孩子。
然后判断node是否是last,是则打印值换行,否则只打印行
public class BinaryNode { private BinaryNode leftChild ; private BinaryNode rightChild ; private int value ; public BinaryNode getLeftChild() { return leftChild; } public void setLeftChild(BinaryNode leftChild) { this.leftChild = leftChild; } public BinaryNode getRightChild() { return rightChild; } public void setRightChild(BinaryNode rightChild) { this.rightChild = rightChild; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public void print(){ LinkedList<BinaryNode> queue= new LinkedList<BinaryNode>(); BinaryNode nlast = this; BinaryNode last = this ; queue.add(this); while (!queue.isEmpty()){ final BinaryNode node = queue.poll(); if(node.getLeftChild() != null){ queue.offer(node.getLeftChild()); nlast = queue.getLast(); } if(node.getRightChild() != null){ queue.offer(node.getRightChild()); nlast = queue.getLast(); } if(node == last){ System.out.println(node.getValue()+"\n"); }else{ System.out.println(node.getValue()); } } } }