剑指offer 59.树 按之字形顺序打印二叉树

Posted transkai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer 59.树 按之字形顺序打印二叉树相关的知识,希望对你有一定的参考价值。

题目描述

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

解题思路

用一个栈s1来存放奇数层节点,另一个栈s2来存放偶数层节点
 

代码如下

public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) 
        
             int layer = 1;
             //s1存奇数层节点
             Stack<TreeNode> s1 = new Stack<TreeNode>();
             s1.push(pRoot);
             //s2存偶数层节点
             Stack<TreeNode> s2 = new Stack<TreeNode>();
              
             ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
              
             while (!s1.empty() || !s2.empty()) 
                 if (layer%2 != 0) 
                     ArrayList<Integer> temp = new ArrayList<Integer>();
                     while (!s1.empty()) 
                         TreeNode node = s1.pop();
                         if(node != null) 
                             temp.add(node.val);
                             System.out.print(node.val + " ");
                             s2.push(node.left);
                             s2.push(node.right);
                         
                     
                     if (!temp.isEmpty()) 
                         list.add(temp);
                         layer++;
                         System.out.println();
                     
                  else 
                     ArrayList<Integer> temp = new ArrayList<Integer>();
                     while (!s2.empty()) 
                         TreeNode node = s2.pop();
                         if(node != null) 
                             temp.add(node.val);
                             System.out.print(node.val + " ");
                             s1.push(node.right);
                             s1.push(node.left);
                         
                     
                     if (!temp.isEmpty()) 
                         list.add(temp);
                         layer++;
                         System.out.println();
                     
                 
             
             return list;

        

 

以上是关于剑指offer 59.树 按之字形顺序打印二叉树的主要内容,如果未能解决你的问题,请参考以下文章

剑指OFFER 按之字形顺序打印二叉树

剑指offer(59)按之字形顺序打印二叉树

59剑指offer--按之字形顺序打印二叉树

剑指offer JZ77 按之字形顺序打印二叉树

剑指Offer60按之字形顺序打印二叉树

剑指offer(C++)-JZ77:按之字形顺序打印二叉树(数据结构-树)