• 61.按之字形顺序打印二叉树


    题目描述:

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

    思路分析:

      用两个栈分别保存从左到右遍历层的节点,和从右到左遍历层的节点,每遍历完一层,返回一层的序列。直到遍历完二叉树的所有层。

    代码:

    public class Solution {
        public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
            ArrayList<ArrayList<Integer>>res=new ArrayList<>();
            ArrayList<Integer>list=new ArrayList<>();
            Stack<TreeNode>s1=new Stack<>(); //用来保存从左到右的序列。
            Stack<TreeNode>s2=new Stack<>();//用来保存从右到左的序列
            if(pRoot==null)
                return res;
            s1.push(pRoot);
            while(!s1.isEmpty()){
                while(!s1.isEmpty()){
                    TreeNode pNode=s1.pop();
                    list.add(pNode.val);
                    if(pNode.left!=null)
                        s2.push(pNode.left);
                    if(pNode.right!=null)
                        s2.push(pNode.right);
                }
                res.add(list);
                list=new ArrayList<>();
                if(s2.isEmpty()) //如果s2为空证明已经遍历完最后一层所以退出
                    break;
                while(!s2.isEmpty()){
                    TreeNode pNode=s2.pop();
                    list.add(pNode.val);
                    if(pNode.right!=null)
                        s1.push(pNode.right);
                    if(pNode.left!=null)
                        s1.push(pNode.left);
                }
                res.add(list);
                list=new ArrayList<>();
            }
             return res;
        }
    
    }
    
  • 相关阅读:
    spring boot 配置时区差别
    概率期望
    Euler函数与Euler定理
    素数&筛法
    等差子序列
    8.19 T2
    8.19 T1
    量化交易
    挺进

  • 原文地址:https://www.cnblogs.com/yjxyy/p/10961276.html
Copyright © 2020-2023  润新知