剑指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;

        }

 

posted @ 2019-08-27 10:16  Transkai  阅读(111)  评论(0编辑  收藏  举报