横向遍历二叉树

思路:
维护一个节点队列和两个节点引用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());
            }
        }

    }
}

 

posted @ 2015-07-22 00:11  niutao  阅读(540)  评论(0编辑  收藏  举报