zoukankan      html  css  js  c++  java
  • 摇摆打印二叉树

    问题

      请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

    分析:

      (1)对树进行层次遍历:使用队列

      (2)需要单独记录每一层的序列:两个队列交替使用

    code:

      

    //树节点
    public class TreeNode {
            int val = 0;
            TreeNode left = null;
            TreeNode right = null;
    
            public TreeNode(int val) {
                this.val = val;
    
            }
        }
    public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
            /*
            层次遍历:队列
            奇数行:左——>右
            偶数行:右->左(奇数行的逆序)
             */
            ArrayList<ArrayList<Integer>> allList = new ArrayList<ArrayList<Integer>>();
            if(pRoot==null){
                return null;
            }
            Queue<TreeNode>[] queue = new Queue[2];
            queue[0] = new ArrayDeque<>();//奇数行
            queue[1] = new ArrayDeque<>();//偶数行
            int count=1; //记录当前到达的层数
            queue[1].add(pRoot);
            while(!queue[0].isEmpty() || !queue[1].isEmpty()){
                ArrayList<Integer> list = new ArrayList<>();
                while(!queue[count%2].isEmpty()){
                    TreeNode temp = queue[count%2].poll();
                    list.add(temp.val);
                    if(temp.left!=null){
                        queue[(count+1)%2].add(temp.left);
                    }
                    if(temp.right!=null){
                        queue[(count+1)%2].add(temp.right);
                    }
                }
           //偶数行:翻转序列
    if(count%2==0){ Collections.reverse(list); } allList.add(list); count++; } return allList; }
  • 相关阅读:
    SignalR + MVC5 简单示例
    SignalR 简单示例
    Web API 简单示例
    Windows Azure 使用体验
    SQL Server 2014 安装小记
    SSRS 迁移
    SSH配置(同一服务器不同用户)
    【6】Zookeeper脚本及API
    【3】Kafka安装及部署
    【2】Kafka概念及原理
  • 原文地址:https://www.cnblogs.com/dream-flying/p/12923960.html
Copyright © 2011-2022 走看看