二叉树的前、中、后序及层次排列

public static void main(String[] args) {
        Tree treeG = new Tree('G', null, null);
        Tree treeD = new Tree('D', null, null);
        Tree treeF = new Tree('F', null, null);
        Tree treeE = new Tree('E', treeF, null);
        Tree treeB = new Tree('B', treeD, treeE);
        Tree treeC = new Tree('C', treeG, null);
        Tree treeA = new Tree('A', treeB, treeC);
        //前序排列
        System.out.print("前序排列:");
        VLR(treeA);
        System.out.println();
        //中序排列
        System.out.print("中序排列:");
        LDR(treeA);
        System.out.println();
        //后序排列
        System.out.print("后序排列:");
        LRD(treeA);
        System.out.println();
        System.out.print("层次排列:");
        Queue<Tree> queue = new LinkedList<>();
        queue.offer(treeA);
        level(queue);

    }

    /**
     * 输出节点
     *
     * @param tree
     */
    public static void print(Tree tree) {
        System.out.print(tree.getData());
    }

    /**
     * 前序排列-VLR
     *
     * @param tree
     */
    public static void VLR(Tree tree) {
        print(tree);
        if (tree.left != null) {
            VLR(tree.left);
        }
        if (tree.right != null) {
            VLR(tree.right);
        }
    }

    /**
     * 中序排序-LDR
     *
     * @param tree
     */
    public static void LDR(Tree tree) {
        if (tree.left != null) {
            LDR(tree.left);
        }
        print(tree);
        if (tree.right != null) {
            LDR(tree.right);
        }
    }

    /**
     * 后序排列-LRD
     *
     * @param tree
     */
    public static void LRD(Tree tree) {
        if (tree.left != null) {
            LRD(tree.left);
        }
        if (tree.right != null) {
            LRD(tree.right);
        }
        print(tree);
    }

    /**
     * 层次排序
     *
     * @param queue
     */
    public static void level(Queue<Tree> queue) {
        if (queue.size() == 0) {
            return;
        }
        Tree tree = queue.poll();
        print(tree);
        if (tree.left != null) {
            queue.offer(tree.left);
        }
        if (tree.right != null) {
            queue.offer(tree.right);
        }
        level(queue);
    }


    @Data
    @ToString
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Tree {
        private char data;
        private Tree left;
        private Tree right;
    }
缘于生活,而归于工作。本人所书,而意于分享。 如有转载,请注明出处! --活出自己范儿
原文地址:https://www.cnblogs.com/Small-sunshine/p/14958023.html