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

    题目描述:


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


      下图借鉴一位牛客网的同学的做法:

    import java.util.ArrayList;
    import java.util.Stack;
    /*
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    public class Solution {
        public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
            ArrayList<ArrayList<Integer>> result = new ArrayList<>();
            if(pRoot==null){
                return result;
            }
            Stack<TreeNode> stack1 = new Stack<>();
            Stack<TreeNode> stack2 = new Stack<>();
            stack1.add(pRoot);
            while(stack1.size()>0||stack2.size()>0){
                ArrayList<Integer> nodeArrayList = new ArrayList<>();
                if(stack1.size()>0){
                    int size = stack1.size();                
                    for(int i=0;i<size;i++){
                        TreeNode p = stack1.pop();
                        nodeArrayList.add(p.val);
                        if(p.left!=null){
                            stack2.add(p.left);
                        }
                        if(p.right!=null){
                            stack2.add(p.right);
                        }
                    }
                    result.add(nodeArrayList);
                    continue;
                }
                if(stack2.size()>0){
                    int size = stack2.size();
                    for(int i=0;i<size;i++){
                        TreeNode p = stack2.pop();
                        nodeArrayList.add(p.val);
                        if(p.right!=null){
                            stack1.add(p.right);
                        }
                        if(p.left!=null){
                            stack1.add(p.left);
                        }
                    }
                    result.add(nodeArrayList);
                    continue;
                }
            }
            return result;
        }
    
    }
    

      

  • 相关阅读:
    OpenWrt VTun Client
    LibreSpeed install on centos
    信号频道带宽、符号率、速率对应关系
    DVB相关标准
    Cisco Switch STP
    TROUBLESHOOTING MULTICAST ROUTING
    企业ERP核心模型与云计算生态
    Istio介绍(1)
    ServiceMesh案例
    Jenkins流水线发布实现CICD到Kubernetes
  • 原文地址:https://www.cnblogs.com/dashenaichicha/p/12609216.html
Copyright © 2011-2022 走看看