zoukankan      html  css  js  c++  java
  • 剑指Offer-按之字形顺序打印二叉树

    package Tree;
    
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.Queue;
    
    /**
     * 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
     * 思路:
     * 先按层次输出二叉树
     * 判断奇数层和偶数层
     * 反转arrayList
     */
    public class Solution9 {
        public static void main(String[] args) {
            int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
            Solution9 Solution9 = new Solution9();
            TreeNode treeNode = Solution9.createBinaryTreeByArray(array, 0);
            for (ArrayList list :
                    Solution9.Print(treeNode)) {
                System.out.println(list);
            }
        }
    
        /**
         * 之字形打印二叉树
         * 用reserve反转,时间复杂度高
         *
         * @param pRoot
         * @return
         */
        public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
            //arrayLists存储结果
            ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<>();
            if (pRoot == null) {
                return arrayLists;
            }
            ArrayList<Integer> arrayList = new ArrayList<>();
            //使用队列,先进先出
            Queue<TreeNode> queue = new LinkedList<>();
            queue.add(pRoot);
            int start = 0;
            int end = 1;
            boolean leftToRight = true;
            while (!queue.isEmpty()) {
                TreeNode temp = queue.remove();
                //添加到本行的arrayList
                arrayList.add(temp.val);
                start++;
                //每打印一个节点,就把此节点的下一层的左右节点加入队列,并记录下一层要打印的个数
                if (temp.left != null) {
                    queue.add(temp.left);
                }
                if (temp.right != null) {
                    queue.add(temp.right);
                }
    
                if (start == end) {
                    start = 0;
                    end = queue.size();
                    if (leftToRight) {
                        arrayLists.add(arrayList);
                    } else {
                        arrayLists.add(reverse(arrayList));
    
                    }
                    leftToRight = !leftToRight;
                    arrayList = new ArrayList<>();
                }
            }
            return arrayLists;
        }
    
        /**
         * 反转
         *
         * @param arrayList
         * @return
         */
        private ArrayList<Integer> reverse(ArrayList<Integer> arrayList) {
            ArrayList<Integer> arrayList1 = new ArrayList<>();
            for (int i = arrayList.size() - 1; i >= 0; i--) {
                arrayList1.add(arrayList.remove(i));
            }
            return arrayList1;
        }
    
        public class TreeNode {
            int val = 0;
            TreeNode left = null;
            TreeNode right = null;
    
            public TreeNode(int val) {
                this.val = val;
    
            }
    
        }
    
        /**
         * 数据转二叉树
         *
         * @param array
         * @param index
         * @return
         */
        private TreeNode createBinaryTreeByArray(int[] array, int index) {
            TreeNode tn = null;
            if (index < array.length) {
                int value = array[index];
                tn = new TreeNode(value);
                tn.left = createBinaryTreeByArray(array, 2 * index + 1);
                tn.right = createBinaryTreeByArray(array, 2 * index + 2);
                return tn;
            }
            return tn;
        }
    }
    
    
  • 相关阅读:
    Java-Class-FC:java.lang.StringBuilder.java
    Java-Class-C:com.github.pagehelper.PageInfo.java
    Java-Class-C:com.github.pagehelper.PageHelper.java
    Java-Class-E:org.springframework.http.HttpStatus.java
    Java-Class-@I:io.swagger.annotation.ApiParam.java
    Java-Class-I:javax.servlet.http.HttpServletRequest.java
    Java-Class-C:java.util.BigDecimal.java
    Code-日期-Java-Class-C:cn.hutool.core.date.DateUtil.java
    MongoDB,还有一个角度看数据
    飘逸的python
  • 原文地址:https://www.cnblogs.com/wupeixuan/p/8623436.html
Copyright © 2011-2022 走看看