zoukankan      html  css  js  c++  java
  • 二叉树的前、中、后序及层次排列

    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;
        }
    
    缘于生活,而归于工作。本人所书,而意于分享。 如有转载,请注明出处! --活出自己范儿
  • 相关阅读:
    BZOJ 2120 数颜色
    BZOJ 3289 Mato的文件管理
    BZOJ 2038 小Z的袜子
    BZOJ 1878 HH的项链
    洛谷P2709 小B的询问
    6491: Daydream
    问题 L: An Invisible Hand
    HDU-2177 取(2堆)石子游戏 (威佐夫博奕)
    (POJ-3279)Fliptile (dfs经典---也可以枚举)
    问题 J: Palindromic Password ( 2018组队训练赛第十五场) (简单模拟)
  • 原文地址:https://www.cnblogs.com/Small-sunshine/p/14958023.html
Copyright © 2011-2022 走看看