zoukankan      html  css  js  c++  java
  • 剑指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;
    
            }
  • 相关阅读:
    MySQL (一)(未完成)
    HTML 学习笔记 CSS3 (边框)
    HTML 学习笔记 JavaScript (函数)
    HTML 学习笔记 JavaScript (对象)
    HTML 学习笔记 JavaScript (变量)
    HTML 学习笔记 JavaScript (实现)
    HTML 学习笔记 JavaScript(简介)
    iOS RunTime运行时(1):类与对象
    iOS UITableView 分割线从零开始
    HTML 学习笔记 CSS(选择器4)
  • 原文地址:https://www.cnblogs.com/Transkai/p/11416643.html
Copyright © 2011-2022 走看看