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;
        }
    
    缘于生活,而归于工作。本人所书,而意于分享。 如有转载,请注明出处! --活出自己范儿
  • 相关阅读:
    关于数据库中浮点运算、保留小数和时间计算
    几个常用的操作
    数字转换为字符串
    Dll控件出错的处理办法
    小巧的服务程序源码(转)
    DELPHI中MDI子窗口的关闭和打开
    用Delphi创建服务程序
    Delphi如何获取QQ2010聊天窗口句柄?
    拖动Form上的图片,Form一起动
    仿药易通输入单位信息后如果没有则自动加入功能
  • 原文地址:https://www.cnblogs.com/Small-sunshine/p/14958023.html
Copyright © 2011-2022 走看看