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;
        }
    
    缘于生活,而归于工作。本人所书,而意于分享。 如有转载,请注明出处! --活出自己范儿
  • 相关阅读:
    Redis:特殊数据类型,hyperloglog(基数),bitmap(位存储)
    Redis:特殊类型geospatial(地理位置类型,纬经度)
    Redis:zset常用指令
    Redis:hash常用指令
    Redis:set集合常用常用指令
    Pytorch学习-数据操作
    天池Python训练营笔记—Python基础入门:从变量到异常处理
    Python基础语法快速复习-面对对象编程
    Python基础语法快速复习-函数式编程
    Python基础语法快速复习-高级特性
  • 原文地址:https://www.cnblogs.com/Small-sunshine/p/14958023.html
Copyright © 2011-2022 走看看