zoukankan      html  css  js  c++  java
  • 57、按之字形顺序打印二叉树

    一、题目

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

    二、解法

     1 import java.util.ArrayList;
     2 import java.util.LinkedList;
     3 import java.util.Queue;
     4 import java.util.Stack;
     5 
     6 /*
     7 public class TreeNode {
     8     int val = 0;
     9     TreeNode left = null;
    10     TreeNode right = null;
    11 
    12     public TreeNode(int val) {
    13         this.val = val;
    14 
    15     }
    16 
    17 }
    18 */
    19 public class Solution {
    20     public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
    21          ArrayList<ArrayList<Integer>> result = 
    22                 new ArrayList<ArrayList<Integer>>();//返回结果
    23         Queue<TreeNode> data = new LinkedList<TreeNode>();//保存树节点
    24         if (pRoot == null)
    25             return result;
    26         data.add(pRoot);//添加根节点
    27         boolean isReverse = true;//按照层序之字形
    28         Stack<TreeNode> stack = new Stack<TreeNode>();
    29         while (!data.isEmpty()) {
    30             ArrayList<Integer> oneLine = new ArrayList<Integer>();//保存一行结果
    31             int p = 0,size = data.size();
    32             while (p++ < size) {
    33                 TreeNode t = data.poll();
    34                 if (isReverse)
    35                     oneLine.add(t.val);
    36                 else
    37                     stack.push(t);
    38                 if (t.left != null)
    39                     data.add(t.left);
    40                 if (t.right != null)
    41                     data.add(t.right);
    42             }
    43             isReverse = !isReverse;
    44             if(!stack.isEmpty()){
    45                 while(!stack.isEmpty())
    46                     oneLine.add(stack.pop().val);
    47             }
    48             result.add(oneLine);
    49         }
    50         return result;
    51     }
    52 
    53 }
  • 相关阅读:
    Photoshop基础照片美化
    通过浏览器学习前端的小技巧
    2018Github用户kamranahmedse分享的开发路线
    20个正则表达式,让你少写1,000行代码
    适合程序员学习的网站
    使用雪碧图Css Sprite精灵 | 加速网页响应速度
    HTTP 协议入门
    SVG动画制作工具 , 从此抛弃臃肿的gif
    MySQL 不用 Null 的理由
    2018年2月设计圈超实用干货大合集
  • 原文地址:https://www.cnblogs.com/fankongkong/p/7462108.html
Copyright © 2011-2022 走看看