【剑指offer-Java版】23从上往下打印二叉树

从上往下打印二叉树:如果把这个书看做是一个特殊的图,那么该打印过程就类似于一个广度优先遍历


    public class _Q23 {

    public <T> void PrintTreeFromTopToButtom(BinaryTreeNode<T> root){
        if(root == null) return;

        Queue<BinaryTreeNode<T>> queue = new LinkedList<>();

        queue.add(root);
        while(!queue.isEmpty()){
            BinaryTreeNode<T> node = queue.remove();

            if(node.leftChild != null) queue.add(node.leftChild);
            if(node.rightChild != null) queue.add(node.rightChild);

            System.out.print(node.value + " ");
        }
        System.out.println();
    }
    }

测试代码:


    public class _Q23Test extends TestCase {

    _Q23 tree = new _Q23();

    public void test(){
        BinaryTreeNode<Integer> root = new BinaryTreeNode<>();
        BinaryTreeNode<Integer> node1 = new BinaryTreeNode<>();
        BinaryTreeNode<Integer> node2 = new BinaryTreeNode<>();
        BinaryTreeNode<Integer> node3 = new BinaryTreeNode<>();
        BinaryTreeNode<Integer> node4 = new BinaryTreeNode<>();
        BinaryTreeNode<Integer> node5 = new BinaryTreeNode<>();
        BinaryTreeNode<Integer> node6 = new BinaryTreeNode<>();

        root.value = 8;
        node1.value = 6;
        node2.value = 10;
        node3.value = 5;
        node4.value = 7;
        node5.value = 9;
        node6.value = 11;

        root.leftChild = node1;
        root.rightChild = node2;
        node1.leftChild = node3;
        node1.rightChild = node4;
        node2.leftChild = node5;
        node2.rightChild = node6;

        node3.leftChild = null; node3.rightChild = null;
        node4.leftChild = null; node4.rightChild = null;
        node5.leftChild = null; node5.rightChild = null;
        node6.leftChild = null; node6.rightChild = null;


        tree.PrintTreeFromTopToButtom(root);
        tree.PrintTreeFromTopToButtom(null);
        tree.PrintTreeFromTopToButtom(node1);
    }
    }

你可能感兴趣的:(【剑指offer-Java版】23从上往下打印二叉树)